Фабрика для создания Фабрики?

Я имею в виду шаблоны GoF Abstract Factory и Factory Method. Я понимаю их цель, но что меня беспокоит, так это то, что оба шаблона опускают обсуждение того, как клиент получает экземпляр «фабричного объекта». Например, в следующем шаблоне абстрактная фабрика обсуждение предполагает, что какая-то другая платформа или код драйвера уже построили иерархию, и что экземпляр Application уже содержит экземпляр GUIFactory (либо WinFactory, либо OSXFactory).

(источник: https://en.wikipedia.org/wiki/Abstract_factory_pattern) Abstract  заводской узор

Аналогичный аргумент относится к шаблону Factory Method. Обсуждение предполагает, что что-то еще снаружи уже создало экземпляр MagicMazeGame.

(источник: https://en.wikipedia.org/wiki/Factory_method_pattern) Factory  шаблон метода

Почему меня это беспокоит? Потому что нам нужен другой шаблон для построения этих иерархий объектов, и именно этот шаблон на самом деле имеют в виду многие люди, когда говорят Factory. В основном заводской шаблон выглядит следующим образом:

(источник: Domain Driven Design, Эрик Эванс, 2003 г.) фабричный шаблон

На мой взгляд, это отличный шаблон от Abstract Factory или Factory Method. Клиент указывает требования, а фабрика создает объекты на основе требований, а также на основе конфигурации и контекста. В качестве гипотетического примера клиент указывает, что ему нужен абстрактный объект Connection, фабрика создает MySQLConnection или OracleConnection в зависимости от драйвера базы данных, настроенного в системе.

Итак, мои вопросы:

  • есть термин для последнего шаблона, который я описал? (Я пытался исследовать, но термин фабрика всегда означает фабричные шаблоны в GoF)
  • как должна называться фабрика, которая создает фабрики? GUIFactoryFactory???
  • или я совсем не прав во всем этом?

Я знаю, что этот вопрос касается только того, как называть вещи, но использование вездесущего языка (источник: Domain Driven Design, Eric Evans 2003. И я полностью согласен) также очень важно в разработке программного обеспечения в мое мнение.


person hummingV    schedule 18.04.2017    source источник


Ответы (1)


Шаблон, используемый для построения иерархий объектов, известен как Корень композиции. Этот шаблон применяется к конструированию любых конкретных объектов, предназначенных для выполнения интерфейса, включая конкретные фабрики, предназначенные для выполнения интерфейсов фабрик.

Composition Root обычно используется в сочетании с внедрением зависимостей, поэтому интересно отметить, что Erich Gamma упомянул добавление внедрения зависимостей, когда в 2009 году его спросили о том, как он может «рефакторить» книгу GoF.

Диаграмма Эрика Эванса выглядит как архитектурное представление, в котором термин фабрика используется в качестве заполнителя для любого шаблона фабрики. Другими словами, он может представлять абстрактную фабрику, фабричный метод или какой-либо другой шаблон фабрики вне GoF. Конкретный фабричный шаблон не имеет значения на архитектурном уровне, только идея о том, что клиент откладывает логику создания экземпляра на какой-то другой компонент.

person jaco0646    schedule 19.04.2017