Шаблон фабрики (метода) и ссылки на другие методы или другие фабрики в глубокой/длинной цепочке

На моей работе идет огромная дискуссия о том, что такое фабричный паттерн.

Главный вопрос обсуждения заключается в том, может ли внутри фабрики при создании объекта также разветвляться вызовы для заполнения его подклассов через другие фабрики.

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

Можно ли вызывать другие фабрики внутри фабрики? или фабрика должна быть автономной и полностью независимой?


person codingjoe    schedule 05.03.2020    source источник
comment
Есть несколько очень разных фабричных моделей. Если вы посмотрите на этот мой ответ, он прояснит некоторые запутанные моменты и даст ссылку на более длинный ответ, который подробно описывает пару шаблонов.   -  person jaco0646    schedule 06.03.2020
comment
После прочтения этой информации было бы полезно, если бы вы могли назвать шаблон фабрики, о котором вы спрашиваете, и добавить некоторый (псевдо) код, демонстрирующий альтернативы, вызывающие разногласия в вашей работе.   -  person jaco0646    schedule 06.03.2020
comment
Да, мы знаем о различных вкусах фабричного шаблона. Однако вопрос в том, может ли фабрика зависеть от ветвей подклассов объекта. Может ли фабрика зависеть от других фабричных методов или фабрика должна быть (самодостаточной) независимой?   -  person codingjoe    schedule 06.03.2020
comment
Вопрос не имеет для меня смысла без указания конкретного шаблона и примера того, что (потенциально) не разрешено. Вокруг этих шаблонов слишком много путаницы, чтобы просто угадать один; и предположение, что этот вопрос имеет один ответ на все вкусы, вероятно, неверно. Вкусы дико разные. Ответы тоже могут быть.   -  person jaco0646    schedule 06.03.2020


Ответы (1)


Для меня это не вопрос Да или Нет, так что вот оно.

Я думаю, что нормально называть фабрику внутри фабрики, но это невозможно сделать без учета недостатков, которые это может вызвать. Чем глубже цепочка заводов, тем сложнее зависимость. Кроме того, это может повлиять на ремонтопригодность и тестируемость.

Чтобы избежать конкретной зависимости, вы можете отделить ее, применяя принципы SOLID. Это приведет вас к полностью гибкой и инъекционной фабричной семье. Но без DI-контейнера это может стать проблемой, а с DI-контейнером также следует учитывать производительность.

Итак, короткий ответ — да, но вам нужно найти баланс между гибкостью, удобством сопровождения, тестируемостью и производительностью.

Эмпирическое правило: создавайте структуры, если они действительно необходимы, без излишней инженерии.

person Wederson Soares    schedule 06.03.2020
comment
В вопросе не упоминается шаблон абстрактной фабрики GoF. - person jaco0646; 06.03.2020
comment
Прежде всего, речь идет не об абстрактной фабрике, а о простом шаблоне создания фабричного объекта. Во-вторых, это именно мой взгляд на это. На работе чувак сделал разные фабрики с цепочкой до 4-5 уровней, что довольно быстро делает одну свободную ориентацию. Я бы предпочел, чтобы у вас были независимые и самодостаточные фабрики. - person codingjoe; 06.03.2020
comment
Я слышал, что некоторые люди называли эти фабрики глубокой цепочки «волшебными фабриками», но не в положительном смысле. - person codingjoe; 06.03.2020
comment
хорошо @codingjoe, так что я могу перефразировать свой ответ, если вы уточните шаблон, на который вы ссылаетесь. Поскольку это шаблон, он должен был быть назван в другом месте. Другим вариантом для Factory является Factory Method. хотите обсудить? - person Wederson Soares; 07.03.2020
comment
@wedersonSoares да, извините, я вижу, что не совсем понял это. Я имею в виду заводской метод. - person codingjoe; 07.03.2020