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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 15.07.2017, 12:00   #1  
ta_and is offline
ta_and
Участник
 
226 / 122 (5) +++++
Регистрация: 26.02.2002
Адрес: СПб
Цитата:
Сообщение от dech Посмотреть сообщение
  1. Вместо Construct() можно запилить всего одну глобальную функцию
Да да! и на вход Аргс! )))
За это сообщение автора поблагодарили: ax_mct (3).
Старый 16.07.2017, 13:27   #2  
dech is offline
dech
Участник
Аватар для dech
Самостоятельные клиенты AX
 
650 / 352 (13) ++++++
Регистрация: 25.06.2009
Адрес: Омск
Записей в блоге: 3
Цитата:
Сообщение от ta_and Посмотреть сообщение
Да да! и на вход Аргс! )))
А зачем вам Args, если требуется только создать нужный инстанс?
__________________
// no comments
Старый 16.07.2017, 16:59   #3  
ta_and is offline
ta_and
Участник
 
226 / 122 (5) +++++
Регистрация: 26.02.2002
Адрес: СПб
Цитата:
Сообщение от dech Посмотреть сообщение
А зачем вам Args..?
Каждому инстансу - по параметру! )
Мы же не рассматриваем сферического коня в вакууме, которому совсем параметры не нужны?..
Старый 16.07.2017, 17:09   #4  
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   #5  
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   #6  
pitersky is offline
pitersky
северный Будда
Аватар для pitersky
Ex AND Project
Соотечественники
 
1,514 / 435 (18) +++++++
Регистрация: 26.09.2007
Адрес: Солнечная система
Цитата:
Сообщение от ta_and Посмотреть сообщение
Ссылка на то, что так (без параметров) сделано в кривой реализации пакетов и цил - это то же самое, что сказать, что давайте равняться на жигули как на эталон машиностроения, а не на тойоту например....
Можно сколько угодно критиковать подход к реализации пакетника - но он есть, и под это надо подстраиваться. По крайней мере, пока его не изменит МС. Иначе о каком едином подходе в разработке может идти речь? Если каждый разработчик будет использовать только свои собственные паттерны, то можно сразу говорить о нечитабельности кода в целом
__________________
С уважением,
Вячеслав
Старый 18.07.2017, 05:56   #7  
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
Старый 18.07.2017, 10:40   #8  
ta_and is offline
ta_and
Участник
 
226 / 122 (5) +++++
Регистрация: 26.02.2002
Адрес: СПб
Цитата:
Сообщение от dech Посмотреть сообщение
Это не есть факт
Приведите пример прикладного класса, которому не нужен ни один параметр?

Цитата:
Сообщение от dech Посмотреть сообщение
Представьте, что вы пришли в управляющую компанию за справкой. А вам говорят, в течение 5 рабочих дней вы выдадим вам полный комплект документов по вашей квартире. Приходите на следующей неделе." А вы такой: "ну мне же только справку...". А вам отвечают: "Извините, законодательство ввело новый стандарт, на любой запрос мы готовим полный пакет документов."
Некорректный пример.
Скорее - это единый формат для всех справок.
Т.е. заголовок, шапка, реквизиты, тело - все отформатировано в едином виде.
если чего-то не нужно, то оно просто пропущено. и место остается пустым.
Зато мы получаем единый формат всех документов. Если нужно получить реквизиты - мы знаем куда смотреть! Если заголовок - что это за документ - смотрим заголовок! в нужном месте. не думая ни о каких других местах и способах достать что же это за документ перед нами и не переворачиваем документ, чтобы посмотреть на обороте, где рыбу заворачивали.
Старый 18.07.2017, 13:35   #9  
dech is offline
dech
Участник
Аватар для dech
Самостоятельные клиенты AX
 
650 / 352 (13) ++++++
Регистрация: 25.06.2009
Адрес: Омск
Записей в блоге: 3
Цитата:
Сообщение от ta_and Посмотреть сообщение
Приведите пример прикладного класса, которому не нужен ни один параметр?
Вспомогательные классы проверки условий и утверждений
Цитата:
Сообщение от ta_and Посмотреть сообщение
Некорректный пример.
Да нет, пример самый подходящий. Что я вижу, исходя из нашего разговора? С одной стороны вы хотите обязать new() принимать параметр и считаете это золотым стандартом (которого, кстати не придерживается M$). С другой стороны вы хотите сделать применение Args стандартом де-факто. Т.е. идеальный вариант для вас, это
X++:
void new(Args _args)
Это, конечно, хорошо в какой-то мере и даже где-то в стандарте мелькает, но опять же повторюсь:
Цитата:
Сообщение от dech Посмотреть сообщение
Аргс - не панацея. Если классу нужен SalesLines и только он, то зачем городить инициализацию через аргс?
К примеру, если вы используете класс Map, то не будете же вы аргс заполнять?

Да и что будет, если так делать, как вы хотите? Представляете сколько параметров передается из метода в метод повсюду? Если все это стандартизовать, то боюсь, что от огромного количества экземпляров данного класса AOS-ы начнут дико свапить на диск, а пользователи сожгут вас на костре.
__________________
// 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, время: 22:02.