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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 14.07.2017, 10:09   #1  
dech is offline
dech
Участник
Аватар для dech
Самостоятельные клиенты AX
 
650 / 352 (13) ++++++
Регистрация: 25.06.2009
Адрес: Омск
Записей в блоге: 3
Цитата:
Сообщение от skuull Посмотреть сообщение
А кто сказал что нельзя? Я сказал что не принято. Оно ж примерно на атрибутах так и работает, просто ненадо свой конструктор каждый раз писать.
А в этой реализации было бы неплохо проверить, что _className являеться наследником базовго класса и getType() у вас вышел какой-то бесполезный, только инфо показывать
  1. Вместо Construct() можно запилить всего одну глобальную функцию
  2. Это учебный пример, лишнего не писал для ясности
  3. Любой каприз за ваши деньги
__________________
// no comments
Старый 15.07.2017, 12:00   #2  
ta_and is offline
ta_and
Участник
 
226 / 122 (5) +++++
Регистрация: 26.02.2002
Адрес: СПб
Цитата:
Сообщение от dech Посмотреть сообщение
  1. Вместо Construct() можно запилить всего одну глобальную функцию
Да да! и на вход Аргс! )))
За это сообщение автора поблагодарили: ax_mct (3).
Старый 16.07.2017, 13:27   #3  
dech is offline
dech
Участник
Аватар для dech
Самостоятельные клиенты AX
 
650 / 352 (13) ++++++
Регистрация: 25.06.2009
Адрес: Омск
Записей в блоге: 3
Цитата:
Сообщение от ta_and Посмотреть сообщение
Да да! и на вход Аргс! )))
А зачем вам Args, если требуется только создать нужный инстанс?
__________________
// no comments
Старый 16.07.2017, 16:59   #4  
ta_and is offline
ta_and
Участник
 
226 / 122 (5) +++++
Регистрация: 26.02.2002
Адрес: СПб
Цитата:
Сообщение от dech Посмотреть сообщение
А зачем вам Args..?
Каждому инстансу - по параметру! )
Мы же не рассматриваем сферического коня в вакууме, которому совсем параметры не нужны?..
Старый 16.07.2017, 17:09   #5  
dech is offline
dech
Участник
Аватар для dech
Самостоятельные клиенты AX
 
650 / 352 (13) ++++++
Регистрация: 25.06.2009
Адрес: Омск
Записей в блоге: 3
Цитата:
Сообщение от ta_and Посмотреть сообщение
Каждому инстансу - по параметру! )
Мы же не рассматриваем сферического коня в вакууме, которому совсем параметры не нужны?..
X++:
public static void main(Args _args)
{
    IdentifierName  className   = _args ? _args.parm() : classstr(PPO_Base);
    PPO_Base        instance    = PPO_Base::construct(className);
    ;

    instance.parmRecord(_args.record()); // а так можно?
    instance.parmArgs(_args);            // или вот так?

    info(strfmt("Class type: %1", instance.getType()));
}
P.S. Кажется уже был разговор о том, что в new()/makeObject() нельзя передавать параметры, если класс планируется вызывать в пакете.
__________________
// no comments

Последний раз редактировалось dech; 16.07.2017 в 17:14.
За это сообщение автора поблагодарили: macklakov (5).
Старый 17.07.2017, 21:25   #6  
ta_and is offline
ta_and
Участник
 
226 / 122 (5) +++++
Регистрация: 26.02.2002
Адрес: СПб
Цитата:
Сообщение от dech Посмотреть сообщение
X++:
    instance.parmRecord(_args.record()); // а так можно?
    instance.parmArgs(_args);            // или вот так?
Вы понимаете разницу между конструктором и методом доступа к внутреннему состоянию (parm*)?
Если да, то тогда зачем эти вопросы?
Если нет, то попробуйте ответить на вопрос - чем отличаются new и construct?
--------
Я утверждаю, что
1. Для подавляющего большинства (99.9%) прикладных классов на вход нужен хотя бы один параметр.
2. Де факто, в ах стандартом для передачи параметров выбран объект класса Аргс.
3. Аргс уже сейчас используется при инициализации всех интерфейсных объектов (формы, отчеты, запускаемые классы с main, даже джобы!)

Почему не продолжить логику и не сделать передачу аргс обязательным параметром при создании любого экземпляра класса?

Ссылка на то, что так (без параметров) сделано в кривой реализации пакетов и цил - это то же самое, что сказать, что давайте равняться на жигули как на эталон машиностроения, а не на тойоту например....

Последний раз редактировалось ta_and; 17.07.2017 в 21:28.
Старый 17.07.2017, 21:55   #7  
pitersky is offline
pitersky
северный Будда
Аватар для pitersky
Ex AND Project
Соотечественники
 
1,514 / 435 (18) +++++++
Регистрация: 26.09.2007
Адрес: Солнечная система
Цитата:
Сообщение от ta_and Посмотреть сообщение
Ссылка на то, что так (без параметров) сделано в кривой реализации пакетов и цил - это то же самое, что сказать, что давайте равняться на жигули как на эталон машиностроения, а не на тойоту например....
Можно сколько угодно критиковать подход к реализации пакетника - но он есть, и под это надо подстраиваться. По крайней мере, пока его не изменит МС. Иначе о каком едином подходе в разработке может идти речь? Если каждый разработчик будет использовать только свои собственные паттерны, то можно сразу говорить о нечитабельности кода в целом
__________________
С уважением,
Вячеслав
Старый 18.07.2017, 05:56   #8  
dech is offline
dech
Участник
Аватар для dech
Самостоятельные клиенты AX
 
650 / 352 (13) ++++++
Регистрация: 25.06.2009
Адрес: Омск
Записей в блоге: 3
Цитата:
Сообщение от ta_and Посмотреть сообщение
Я утверждаю, что
1. Для подавляющего большинства (99.9%) прикладных классов на вход нужен хотя бы один параметр.
"Это не есть факт, мсье Дюк." Я не спорю, что любой класс основывается на каких-то исходных данных, но ничего не обязывает передавать их через методы доступа вместо конструктора. В исключительном случае, когда в new() нужно определиться с чем именно работать, да, согласен, это необходимо. Но в том же пакетнике вы не запустите run(), пока не проинициализируете его.
Цитата:
Сообщение от ta_and Посмотреть сообщение
2. Де факто, в ах стандартом для передачи параметров выбран объект класса Аргс.
Да, и обычно это делается методом initFromArgs(). Args предназначен для передачи параметров через MenuItem из форм и меню. Но если класс не вызывается через менюайтем, то это попахивает явным извратом.
Цитата:
Сообщение от ta_and Посмотреть сообщение
3. Аргс уже сейчас используется при инициализации всех интерфейсных объектов (формы, отчеты, запускаемые классы с main, даже джобы!)
Ну естественно. Полностью согласен с этим фактом! Если класс сам по себе имеет возможность запускаться через менюайтем, почему бы даже программно не инициализировать класс через аргс?
Цитата:
Сообщение от ta_and Посмотреть сообщение
Почему не продолжить логику и не сделать передачу аргс обязательным параметром при создании любого экземпляра класса?
Аргс - не панацея. Если классу нужен SalesLines и только он, то зачем городить инициализацию через аргс?
Представьте, что вы пришли в управляющую компанию за справкой. А вам говорят, в течение 5 рабочих дней вы выдадим вам полный комплект документов по вашей квартире. Приходите на следующей неделе." А вы такой: "ну мне же только справку...". А вам отвечают: "Извините, законодательство ввело новый стандарт, на любой запрос мы готовим полный пакет документов."
__________________
// no comments
Теги
sysextension framework, sysoperation framework, как правильно, полезное

 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
stephenmann: Technical History of Dynamics AX - From Axapta 3.0 to AX2012 Blog bot DAX Blogs 5 03.03.2017 10:22
dynamicsax-fico: Invoice search AX2012 vs. AX7 (Part 2) Blog bot DAX Blogs 0 01.04.2016 10:11
DAX2009 аналог friend классов. Как сделать? Raven Melancholic DAX: Программирование 9 07.11.2015 23:50
emeadaxsupport: Inventory closing differences between AX4.0 and AX2012 using weighted average costing method Blog bot DAX Blogs 0 27.12.2012 19:11
Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра
Комбинированный вид Комбинированный вид

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

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

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