Цитата:
Сообщение от
Ievgenii
Это я к тому что в мета данных вне Ах хранить числовые значений не стоит.[/I]
Я так понимаю, что у участников идеи по самой теме кончились, раз пошли боковые ветки.
Ок. Тогда попробую подвести итоги:
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
так? вроде ничего не забыл?