|
12.06.2017, 15:26 | #1 |
Участник
|
Цитата:
Паттерны из GoF и подобная литература решает конкретную задачу в программировании и очень жалко что по историческим причинам в АХ попадают люди предпочитающие методы по 2000 строк потому что "все в 1 месте, так удобней" и отрицающие все что "не как в 4ке". Выглядит как-то так |
|
|
За это сообщение автора поблагодарили: ena_ax (-1). |
12.06.2017, 17:16 | #2 |
Banned
|
Цитата:
Сообщение от skuull
Атрибуты решают вполне конкретную задачу - добавление нового класса в иерархию без изменения родительского класса, что особенно актульно в 7ке, т.к. не надо оверлеить.
Паттерны из GoF и подобная литература решает конкретную задачу в программировании и очень жалко что по историческим причинам в АХ попадают люди предпочитающие методы по 2000 строк потому что "все в 1 месте, так удобней" и отрицающие все что "не как в 4ке". Выглядит как-то так Эти аттрибуты даже не паттерн - это костыль. Причем кривой. Да, решает задачу. Искусственной проблемы. Есть фундаментальные правила конкретной системы основанные на изменении слоев. Best Practices for Static Construct Methods https://msdn.microsoft.com/en-gb/library/aa637432.aspx Даже если отставить в сторону вопрос идиотизма блокирования и принять extension model как данность то не такие костыли нужны системе, а многое другое, в частности переопределение и замена статических методов включая ::construct. Да, получатся те же слои только сбоку, что конечно же противоречит новой религии доступа к телу. Но детей делать не трогая - средневековье. Да, красивые балахоны с дырочками - это конечно решает задачу. Религиозную. |
|
12.06.2017, 18:50 | #3 |
Участник
|
Цитата:
Последний раз редактировалось skuull; 12.06.2017 в 19:03. |
|
12.06.2017, 20:40 | #4 |
Banned
|
Цитата:
Сообщение от skuull
Есть какие-то "общепринятые" вещи в программировании, про Барбару
Я до сих пор помню глаза напарника индуса когда завернул Java в X++. И помню свои крепкие матюги на "общепринятые" вещи от блистательного программиста C#. Да, "общепринятые" вещи в программировании - абсолютно не нужны так как это удорожает поддержку кода и его усложняет. Любое уровня ERP должно быть максимум консерватизма и максимум последовательности своим основам. Никаких "общепринятых" вещей. Применительно к Аксапте, запрету overlayering и костылям в виде этих аттрибутов - если это следование "общепринятым" вещам в программировании то кто-то проклял всех программистов, а программистов AX в особенности. Я вижу Extension model для AX как просто запрет на программирование. Если же это таки альтернатива то она существенно дороже и намного опаснее чем overlayering. Создание наследников через атрибуты чтобы следовать Extension model - это способ лечения зуба когда рот зашит. Цитата:
При́нцип откры́тости/закры́тости (англ. The Open Closed Principle, OCP) — принцип ООП, устанавливающий следующее положение: «программные сущности (классы, модули, функции и т. п.) должны быть открыты для расширения, но закрыты для изменения»
|
|
|
За это сообщение автора поблагодарили: dech (3), kvan (3), axotnik88 (1). |
13.07.2017, 22:13 | #5 |
Участник
|
Цитата:
Сообщение от skuull
Атрибуты решают вполне конкретную задачу - добавление нового класса в иерархию без изменения родительского класса, что особенно актульно в 7ке, т.к. не надо оверлеить.
Паттерны из GoF и подобная литература решает конкретную задачу в программировании и очень жалко что по историческим причинам в АХ попадают люди предпочитающие методы по 2000 строк потому что "все в 1 месте, так удобней" и отрицающие все что "не как в 4ке". Выглядит как-то так Создаём базовый класс: X++: public class PPO_Base { } protected void new() { } public str getType() { return "Base"; } public static PPO_Base construct(IdentifierName _className = classstr(PPO_Base)) { DictClass dictClass = new DictClass(classname2id(_className)); ; if (!dictClass) throw error(strfmt("Unable to instantiate \"%1\" class", _className)); return dictClass.makeObject(); } public static void main(Args _args) { IdentifierName className = _args ? _args.parm() : classstr(PPO_Base); PPO_Base instance = PPO_Base::construct(className); ; info(strfmt("Class type: %1", instance.getType())); } X++: public class PPO_Derived extends PPO_Base { } public str getType() { return "Derived"; } Как использовать в коде: X++: PPO_Base base = PPO_Base::construct(); PPO_Base derived = PPO_Base::construct(classstr(PPO_Derived)); ; info(strfmt("Base class type: %1", base.getType())); info(strfmt("Derived class type: %1", derived.getType()));
__________________
// no comments |
|
|
За это сообщение автора поблагодарили: macklakov (1), skuull (2), ax_mct (3), ta_and (4), Logger (1). |
14.07.2017, 04:10 | #6 |
Участник
|
Цитата:
А в этой реализации было бы неплохо проверить, что _className являеться наследником базовго класса и getType() у вас вышел какой-то бесполезный, только инфо показывать |
|
14.07.2017, 10:09 | #7 |
Участник
|
Цитата:
Сообщение от skuull
А кто сказал что нельзя? Я сказал что не принято. Оно ж примерно на атрибутах так и работает, просто ненадо свой конструктор каждый раз писать.
А в этой реализации было бы неплохо проверить, что _className являеться наследником базовго класса и getType() у вас вышел какой-то бесполезный, только инфо показывать
__________________
// no comments |
|
15.07.2017, 12:00 | #8 |
Участник
|
|
|
|
За это сообщение автора поблагодарили: ax_mct (3). |
16.07.2017, 13:27 | #9 |
Участник
|
А зачем вам Args, если требуется только создать нужный инстанс?
__________________
// no comments |
|
16.07.2017, 16:59 | #10 |
Участник
|
|
|
Теги |
sysextension framework, sysoperation framework, как правильно, полезное |
|
|