Сам процесс консолидации - это то, где мне нужно больше всего составить.
Итак, вы имеете в виду, что процесс создания данных в вашей системе - это то, где будет создаваться большинство доменных объектов?
Это имеет смысл и соответствует большинству приложений.
Чего я не понимаю, так это то, где должна заканчиваться эта логика консолидации?
Логика консолидации будет обеспечиваться одним или несколькими сервисными компонентами, которые, вероятно, используют один или несколько репозитариев компонентов и один или несколько компонентов работы компонентов. Этот сервис будет скомпонован в корне композиции, как и любые репозитории / единицы работы, которые вы в итоге создадите.
Данные сами по себе полностью динамические. Вы не можете структурировать свое приложение так, чтобы статически знать расположение данных, поэтому вы не можете создать его в корне композиции. И вы не должны пытаться. Вместо этого ваш код может использовать ORM для определения или сопоставления с реляционной схемой между объектами данных вашего домена.
Затем вы можете использовать репозиторий / единицу работы для извлечения данных из хранилища. Вы также используете свой пользовательский интерфейс / службу для создания новых данных, используя new
- в этом нет ничего постыдного для объектов домена, которые являются чисто данными и гарантированно не имеют никаких зависимостей. Сохранять новые или измененные данные в хранилище / единице работы.
Если это заставляет вас съеживаться, вы всегда можете использовать фабричный шаблон, который вводится из корня композиции для создания этих объектов. Но если вы структурировали доменные объекты низкого уровня так, чтобы они были DTO , это вам ничего не даст, если вообще что-то произойдет.
Так что вам не нужно использовать Unity для предоставления всего, и вам не нужно создавать абсолютно все объекты в вашей системе в корне композиции. Но вы должны попытаться создать статические части вашей системы или даже статически настраиваемые динамические части вашей системы в корне композиции. Это очень хорошо отображает DI-контейнеры, такие как Unity.