Я работаю над тем, чтобы обдумать шаблон factory, используя его в простом проекте хранения данных в свободное время. Идея состоит в том, чтобы взять простые данные и сохранить их в базе данных, используя простой фабричный шаблон в VB.NET. Я думаю, что у меня есть базовое понимание самого шаблона, однако я борюсь с тем, как правильно вписать фабричные классы в архитектуру. У меня есть стандартная трехуровневая архитектура для этого проекта, которая выглядит примерно так:
Презентация
-Presentation.Common
-Presentation.DataStorageWebAppName
Бизнес
-BusinessLayer.Common
-BusinessLayer.DataStorageAppName
Данные
-DataLayer.Common
-DataLayer.DataStorageAppName
Общий
-Common
-Common.DataStorageAppName
Интерфейсы
-Interfaces.Common
-Interfaces.DataStorageAppName
Чтобы выделить конкретный сценарий, в котором у меня возникли проблемы с архитектурой приложения, позвольте мне привести пример. Предположим, что на бизнес-уровне я создаю класс в DLL BusinessLayer.DataStorageAppName с именем Foo. У него есть интерфейс IFoo, который находится в DLL Interfaces.DataStorageAppName. Чтобы создать экземпляр класса Foo через его интерфейс IFoo с использованием простого фабричного шаблона, прямо сейчас я создаю класс Factory в BusinessLayer.DataStorageAppName и пишу общий/статический метод, чтобы дать мне экземпляр через интерфейс IFoo. Позже, насколько я понимаю, я мог бы решить заменить объект, который возвращает этот класс Factory, без необходимости делать что-то еще (теоретически).
Чтобы добраться до сути, это работает, но что кажется странным, так это то, что теперь я вынужден создавать несколько классов Factory: по существу, по одному на каждую DLL, чтобы я мог избежать циклических ссылок. Есть ли более чистый способ реализовать эти фабричные классы, не прибегая к использованию стороннего решения, такого как замок Виндзор и т. д. и т. д. Кажется, что здесь мне не хватает фундаментальной концепции. Кажется, что должно быть возможно иметь один «репозиторий», если хотите, в архитектуре, которая отвечает за раздачу экземпляров объектов.
Заранее спасибо!