Използвам 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
. Или има някакъв друг начин да го направите?
Това важи не само за зареждането на обекти, но и за тяхното запазване и премахване.