Читаю и недогоняю
https://metanit.com/sharp/patterns/2.5.php
А что если у создаваемых классов разное количество и назначение полей и их нужно инициализировать или к примеру неодинаковое количество частей ... ?(интерфейс у этих классов одинаковый)
Какой-то непаттерн а костыль ...
Здравствуйте, VVVa, Вы писали:
VVV>А что если у создаваемых классов разное количество и назначение полей и их нужно инициализировать или к примеру неодинаковое количество частей ... ?(интерфейс у этих классов одинаковый)
VVV>Какой-то непаттерн а костыль ...
Практически все шаблоны GoF такие вот недокостыли. На самой начальной стадии смысл имеет
GRASP. В конечной стадии шаблоны Enterprise от Мартина Фаулера. Шаблоны GoF по большей части (хоть и не все) повторяют друг друга, что видно по UML диаграммам. Меняют только название шаблона проектирования и роли объектов, а иерархия классов остаётся той же. Вызвали вот такой метод, тогда этот шаблон будет называться так, вызвали другой, тогда назовём иначе. И ладно было бы что-то больше полиморфизма, но нет. Потому если нужны ответы на вопросы про поля, про объекты, про интерфейсы, то лучше читать книгу "Архитектура корпоративных программных приложений" Мартина Фаулера.
А шаблоны GoF это хороший способ провести аналитическую работу над изысканиями банды четырёх. Программист ООП и обобщённой парадигмы программирования может пользоваться GoF интуитивно и это гораздо проще и эффективнее, так как это продвижение от общего к частному. А вот чтобы применить GoF нужно двигаться от частного, к общему, то есть банда четырёх не стала проводить фундаментальные исследования как Мартин Фаулер, просто навыдирала из своих прошлых проектов решений и сунула как есть. Потому там и кажется многое недоделкой, а тот же Адаптер известен как Обёртка задолго до них, или те же Шаблонные методы естественны для шаблонов C++ и на них даже построена стандартная библиотека шаблонов, и это ещё вызов функции через указатель никто не отменял.
В итоге некоторые программисты не советуют новичкам учить GoF, так как смысла в этом случае мало. Более опытные всё равно не будут это использовать в том виде, в каком оно существует. Читал историю возникновения GoF, и это я не для красного словца упомянул, что они выдрали решения из своих старых проектов, что вроде бы логично, но не все понимают, когда сталкиваются не со строгими теориями, а с кусками чего-то. Люди то думают, что для книжки нужно было хоть немного подумать, банда четырёх и подумали, но не над переосмыслением и движении к общему, а какое решение добавить, а какое нет и как их назвать.
Вот здесь почитай:
https://refactoring.guru/ru/design-patterns/builder
Возможно, более понятно станет.
Здравствуйте, LaptevVV, Вы писали:
LVV>Вот здесь почитай: https://refactoring.guru/ru/design-patterns/builder
LVV>Возможно, более понятно станет.
Ну и костыль .... заводить под каждый класс строителя и в директоре все случаи описывать ... что за ерунда ...
Кажись инициализировать поля другого класса даже через метод плоховато затея противоречит инкопсуляции (скрытии)
Да и друзей в С# вроде убрали
Как вобще такойкостыль могли придумать ?
А какой еще паттерн можно применить, если нужно много полей инициализировать (и одинаковые есть) в родственных классах?
Здравствуйте, VVVa, Вы писали:
VVV>Читаю и недогоняю https://metanit.com/sharp/patterns/2.5.php
VVV>А что если у создаваемых классов разное количество и назначение полей и их нужно инициализировать или к примеру неодинаковое количество частей ... ?(интерфейс у этих классов одинаковый)
VVV>Какой-то непаттерн а костыль ...
Не утыкайся в один-единственный паттерн. Попробуй совместить.
Например, можно часть строительных блоков загрузить через сериализацию (и потом, возможно, поменять какие-то свойства), часть создать с нуля, часть скопировать (template) и потом все это соединить вместе в финальный объект.
Здравствуйте, VVVa, Вы писали:
VVV>Читаю и недогоняю https://metanit.com/sharp/patterns/2.5.php
VVV>А что если у создаваемых классов разное количество и назначение полей и их нужно инициализировать или к примеру неодинаковое количество частей ... ?(интерфейс у этих классов одинаковый)
VVV>Какой-то непаттерн а костыль ...
Посмотри на интерфейс класса StringBuilder в .NET помоему достаточно хороший пример паттерна.
Когда создать нужное состояние объекта в одном конструкторе не удобно или не возможно.
https://docs.microsoft.com/en-us/dotnet/api/system.text.stringbuilder?view=netframework-4.8#methods
”Жить стало лучше... но противнее. Люди которые ставят точку после слова лучше становятся сторонниками Путина, наши же сторонники делают акцент на слове противнее ( ложь, воровство, лицемерие, вражда )." (с) Борис Немцов