12.04.2011, 21:34 | #32 |
Участник
|
Цитата:
Ок. Тогда попробую подвести итоги: 1. контейнер значений (в т.ч. контейнер контейнеров) плюсы: = очень просто инициализировать значения, легко добавлять/изменять значений = стандартный функционал работает с контейнерами, поэтому проблем с примером использования не будет = единственный способ сериализации, приемлемый для передачи параметров между клиентом и сервером (за таблиц, конечно) минусы: = контейнер - константа. ВСЕГДА. любая попытка изменить контейнер приводит к пересозданию контейнера. что чревато проблемами производительности для больших наборов = контейнер - содержит только константы. не содержит ссылки. поэтому хранить ссылку на класс внутри контейнера нельзя = никакой встроенной проверки типов. нужно писать самому = никакой встроенной проверки количества данных. нужно писать самому. или надеятся на добросовестность программиста пример инициализации: container parm = [['<html>','</html>'],['<body>','</body>']]; container parm = [[myTable1, myField1], [myTable2, myField2]]; пример использования: = pack/unpack = класс keySum 2. класс (set, list, map и т.п.) плюсы: = контроль типов присутствует (хоть и минимальный) = класс не пересоздается в памяти при изменении минусы: = писать нужно гораздо больше кода чем с контейнерами примеры использования: ??? 2.1. класс (set, list, map и т.п.), хранящий экземпляры специально написанного класса плюсы: = полный контроль над значениями минусы: = писать надо очень много пример инициализации: set mySet = new Set(Types:Class); mySet.add(new MyParm(myTable1, field1)); mySet.add(new MyParm(myTable2, field2)); пример использования: ??? 2.2. класс (set, list, map и т.п.), хранящий struct: плюсы: = не надо писать собственного класса минусы: = struct не делает контроля обязательности = очень многословная запись пример инициализации: set mySet = new Set(Types:Class); struct myStruct = new Struct(Types::Integer, "age", Types::String, "name"); myStruct.value("name","Jane Dow"); myStruct.value("age", 34); mySet.add(myStruct); myStruct.value("name","Tom Gun"); myStruct.value("age", 45); mySet.add(myStruct); пример использования: ??? 2.3. класс (set, list, map и т.п.), хранящий контейнеры: = даже не знаю минусы: = бу-э-э-э... способ объединяет минусы всех способов пример инициализации: set mySet = new Set(Types:Class) mySet.add([myTable1, field1]); mySet.add([myTable2, field2]); пример использования: FactureCalcBalances_RU 3. таблицы плюсы: = полный контроль = эффективная передача клиент/сервер = достаточно очевидно для любого програмиста минусы: = нужно писать кода не меньше, чем в случае 2.1 "класс собственных классов" пример использования: NumberSeqReference.loadModule() NumberSeqReference_Ledger.loadModule() 4. xml-файл в ресурсе плюсы: = удобно передавать вместе с приложением. особенно большие наборы данных минусы: = очень неочевидно для программистов = работа с xml ресурсоемка пример использования: \Data Dictionary\Tables\BITimePeriodsMDX\Methods\importFromAOT так? вроде ничего не забыл? |
|