|
26.07.2020, 10:14 | #1 |
Участник
|
Цитата:
Сообщение от S.Kuskov
Кто говорил про автогенерацию кода? Авто-генерация кода это вообще не про это.
Порождающие шаблоны проектирования - это не про генерацию кода, это про генерацию объектов. Если вы разработчик и семейства прикладных объектов и фабрики которая эти объекты инициализирует, то вы на этапе проектирования закладываете в свою схему классов такие правила работы с ними, которые помогут избежать написания кода в стиле кучи if else. Вы спрашиваете почему куча if else - это плохо? нет, я спросил то, что спросил: Почему так? new без параметров, инициализация через parm-методы |
|
26.07.2020, 11:25 | #2 |
Боец
|
1. Потому что класс может быть широко используемый, с тем или иным набором необходимых параметров. Затолкать все параметры в new() - получится мусорка, супер универсальный конструктор, который непонятно как использовать. Понятнее иметь несколько конструкторов construct*(). Яркий пример суперперегруженного конструктора у классов PrceDisc*. Каждый раз плюешься.
2. New() нельзя использовать в CoC со всеми вытекающими. 3. Чисто синтаксически, когда в коде пишеся ClassName:: - вываливается спсок всемвозможных конструкторов, из которых понятно, что больше подходит. как использовать класс. Если написать myObject = new Object( , то вывалится 10 непонятных параметров. вдобавок, половина которых по-дефолту, а мне еще нужно установить значение десятного, повторив дэфолты тех, что в середине.... По-моему, MS рекомендовал уходить от new() в сторону consеruct() еще лет 10 тому. Что касается методов parm() - это неудачный артефакт X++, породивший миллионы бесполезного parm-кода. К счастью, от него уже избавились в D365 в пользу модификаторов доступа. Последний раз редактировалось DSPIC; 26.07.2020 в 11:35. |
|
|
За это сообщение автора поблагодарили: mazzy (5). |
26.07.2020, 12:36 | #3 |
Участник
|
Цитата:
Цитата:
заталкивать в new конечно стоит только обязательные параметры. Цитата:
в смысле? другими словами, это "достоинство new без параметров" или "недостак CoC"? Цитата:
но взгляни на тот же SysCLRType. в нем constuct оставляет объект в полусобранном состоянии. да, там есть newFromTypeName, который полностью инициализирует. Но зачем такой construct(), который готовит полуфабрикат? если поискать строку 'protected void new(' в акс2009 то будет найдено порядка 1000 вхождений. да, большинство - это старые классы, где есть конструкторы с нормальными параметрами. Но есть и такие как SysCLRType. Цитата:
Да, я понял про PriceDisc. Надо подумать. Цитата:
Ну... мысль понятна. Не буду спорить со словом "избавились" в прошедшем времени |
|