AXForum  
Вернуться   AXForum > Microsoft Dynamics AX > DAX: Программирование
All
Забыли пароль?
Зарегистрироваться Правила Справка Пользователи Сообщения за день Поиск

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 13.06.2017, 18:48   #1  
belugin is offline
belugin
Участник
Аватар для belugin
Сотрудники Microsoft Dynamics
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии 2011
Лучший по профессии 2009
 
4,622 / 2925 (107) +++++++++
Регистрация: 16.01.2004
Записей в блоге: 5
Цитата:
Сообщение от trud Посмотреть сообщение
а кстати есть ли название у такого подхода с передачей класса, это из какого-то существующего языка?
т.е. код вида
X++:
Class1 c1 = new Class1();

c1.init(classstr(Class2));
В основном в X++ - так как было принято решение, что можно объявить класс с таким же именем что и переменную, то класс не является именем объекта-метакласса, как в Питоне, например, а надо специально его объявлять с такой штукой. Да и тип у нее - строка

В С# передают type а не строчку.
В X++ - tableNum, fieldNum, classStr, tableStr и т.д. то есть передаются целые числа и строки без контроля типов.
Старый 13.06.2017, 19:26   #2  
ax_mct is offline
ax_mct
Banned
 
2,548 / 1091 (0) ++++++++
Регистрация: 10.10.2005
Адрес: Westlands
Цитата:
Сообщение от belugin Посмотреть сообщение
В основном в X++ - так как было принято решение, что можно объявить класс с таким же именем что и переменную, то класс не является именем объекта-метакласса, как в Питоне, например, а надо специально его объявлять с такой штукой. Да и тип у нее - строка

В С# передают type а не строчку.
В X++ - tableNum, fieldNum, classStr, tableStr и т.д. то есть передаются целые числа и строки без контроля типов.
Что X++, что Java, что С# - все это делают. По сути - рефлексия. Которая не сильно уместна в коде приложения, а больше для утилит.

X++
SysDictClass::newName(classstr("class name"));

С#
Assembly.CreateInstance("class name");

Java
Class.forName("class name")

А код типа
Class1 c1 = new Class1();
c1.init(classstr(Class2));
если подумать то полная дичь, а не рефлексия. Дали конкретной обезьяне зачем-то знание паттернов.
Старый 14.06.2017, 07:18   #3  
belugin is offline
belugin
Участник
Аватар для belugin
Сотрудники Microsoft Dynamics
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии 2011
Лучший по профессии 2009
 
4,622 / 2925 (107) +++++++++
Регистрация: 16.01.2004
Записей в блоге: 5
Цитата:
Сообщение от ax_mct Посмотреть сообщение
А код типа
Class1 c1 = new Class1();
c1.init(classstr(Class2));
если подумать то полная дичь, а не рефлексия. Дали конкретной обезьяне зачем-то знание паттернов.
Я думаю тут trud имел ввиду вообще саму идею передачи имени класса, а не то, что это то же имя класса, что и у того объкта, которому он передается
Старый 13.06.2017, 19:57   #4  
dech is offline
dech
Участник
Аватар для dech
Самостоятельные клиенты AX
 
650 / 352 (13) ++++++
Регистрация: 25.06.2009
Адрес: Омск
Записей в блоге: 3
Цитата:
Сообщение от belugin Посмотреть сообщение
В основном в X++ - так как было принято решение, что можно объявить класс с таким же именем что и переменную, то класс не является именем объекта-метакласса, как в Питоне, например, а надо специально его объявлять с такой штукой. Да и тип у нее - строка

В С# передают type а не строчку.
В X++ - tableNum, fieldNum, classStr, tableStr и т.д. то есть передаются целые числа и строки без контроля типов.
Если речь идёт о рефлексии, то что насчет classnum() / classidget()?
Почему про них забыли и никто этим не пользуется?
__________________
// no comments
Старый 13.06.2017, 22:43   #5  
ax_mct is offline
ax_mct
Banned
 
2,548 / 1091 (0) ++++++++
Регистрация: 10.10.2005
Адрес: Westlands
Цитата:
Сообщение от dech Посмотреть сообщение
Если речь идёт о рефлексии, то что насчет classnum() / classidget()?
Почему про них забыли и никто этим не пользуется?
Потому что с небес спускаются боги от программирования которые знают "общепринятое" classstr() и не знакомы с этими местячковыми функциями. Ну и походу показывают убогим что такое настоящее программирование.

Вот для них и выставляют в качестве интерфейса SysDictClass::newName(class name), чтобы потом стыдливо className2Id() для new(Id).

И да, по-моему эти "атрибуты в расширении наследования классов" - по сути своей ни что иное как использование рефлексии. Патентованный хак заколоченной фабрики.
За это сообщение автора поблагодарили: ta_and (3).
Старый 14.06.2017, 07:29   #6  
belugin is offline
belugin
Участник
Аватар для belugin
Сотрудники Microsoft Dynamics
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии 2011
Лучший по профессии 2009
 
4,622 / 2925 (107) +++++++++
Регистрация: 16.01.2004
Записей в блоге: 5
Цитата:
Сообщение от dech Посмотреть сообщение
Если речь идёт о рефлексии, то что насчет classnum() / classidget()?
Почему про них забыли и никто этим не пользуется?
Про них не забыли ими пользуются, но меньше. classIDGet вообще альтернативы пока нет.

В Ax2012 числовые идентификаторы стали специфичными для установки. Это сняло много проблем (например, не надо держать "сервер идентификаторов" чтобы их централизованно распределять). Но при этом оказалось, что их не стоит хранить на внешних носителях. Например при переносе бекапа с рабочей базы на тестовую результат может быть неработоспособен так как идентификаторы классов, каких-нибудь там форматов платежей в настройках не совпадает.

Соответственно везде перевели хранение на имена. Дополниельно к этому перевели на строчки еще кучу мест - тут уж я не знаю зачем. Например типы в диалоге, вроде, никуда не сохраняются, а addField(typeNum(xxx) надо переводить на extendedTypeStr
За это сообщение автора поблагодарили: ax_mct (5).
Старый 14.06.2017, 11:20   #7  
ta_and is offline
ta_and
Участник
 
226 / 122 (5) +++++
Регистрация: 26.02.2002
Адрес: СПб
Цитата:
Сообщение от belugin Посмотреть сообщение
типы в диалоге, вроде, никуда не сохраняются, а addField(typeNum(xxx) надо переводить на extendedTypeStr
зубная боль...
зачем?..............
За это сообщение автора поблагодарили: ax_mct (5).
 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
Запросы формы "Выбрать" в Ax 2012 vmokerov DAX: Программирование 3 18.11.2014 14:19
Как из кода сделать запись в DataSource "грязной"? AR® DAX: Программирование 3 25.04.2014 12:07
Перезапуск AOS'ов. Батник (".bat" файл) lev DAX: Администрирование 3 26.02.2013 12:51
Кнопка "Выбрать", как её добавить aao_p DAX: Программирование 6 31.05.2012 13:36
"Инвентаризационный код" в группах инвентаризации и создание строк инвентаризации lev DAX: Функционал 0 11.10.2011 09:49

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход

Рейтинг@Mail.ru
Часовой пояс GMT +3, время: 01:33.