Показать сообщение отдельно
Старый 12.04.2011, 21:34   #41  
mazzy is offline
mazzy
Участник
Аватар для mazzy
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
29,472 / 4494 (208) ++++++++++
Регистрация: 29.11.2001
Адрес: Москва
Записей в блоге: 10
Цитата:
Сообщение от 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

так? вроде ничего не забыл?
__________________
полезное на axForum, github, vk, coub.