Я использую C++ (с библиотекой Qt), чтобы создать простое приложение, смоделированное в предметной области. Я пишу свои собственные классы сопоставления O/R. Поскольку это приложение будет расти в будущем, я стараюсь поддерживать чистую кодовую базу с четко разделенными слоями.
Проблема, с которой я сталкиваюсь, заключается в том, когда и где загружать совокупные корни, на которые ссылается объект в другом модуле. (Здесь я использую термин «модуль» Эрика Эванса из книги DDD.)
В настоящее время у меня есть простой объект с именем Client
, который находится в модуле ClientModule
. В PermitModule
у меня есть объект Permit
. (на самом деле все сложнее, но для краткости я остановлюсь на этих двух объектах, так как они являются совокупными корнями) Объект Permit
имеет ссылку на Client
как applicant
. Это моя модель домена.
Снизу вверх у меня есть Уровень инфраструктуры, который содержит классы сопоставления O/R и конкретные реализации Repository
объектов. Таким образом, у меня были бы здесь классы ClientMapper
, ClientRepositoryDb
, PermitMapper
и PermitRepositoryDb
.
Далее следует уровень предметной области, который содержит модель предметной области (классы Client
и Permit
), а также интерфейсы репозитория ClientRepository
и PermitRepository
.
Выше у меня есть Прикладной уровень, а затем Презентационный уровень, но в данном примере это не имеет значения.
Мой вопрос заключается в том, должны ли отношения между Permit
и Client
загружаться в класс PermitMapper
или в класс PermitRepository
. Или есть другой способ сделать это?
Это касается не только загрузки объектов, но и их сохранения и удаления.