Постоянное невежество - это применение принципа единой ответственности, который на практике означает, что доменные объекты ( DO ) не должны содержать код, связанный с постоянством, вместо этого они должны содержать только доменную логику.
а) Я предполагаю, что это означает, что код, который связывается с нижними уровнями (то есть уровнями персистентности), живет вне модели предметной области в других классах ( OC ) уровня бизнес-логики?
б) Если мое предположение в соответствии с а) верно, то ДО , скажем Customer
, никогда не содержит такие методы, как GetCustomers
или GetCustomerByID
?
c) Если мои предположения по пунктам a) и b) верны и предполагается, что Customer
объект домена использует ленивую загрузку для некоторых своих свойств, то в какой-то момент Customer
внутренняя логика должна связаться с OC , который, в свою очередь, получает отложенные данные. Но если Customer
необходимо связаться с OC для получения отложенных данных, то мы не можем утверждать, что доменные объекты не содержат логики, связанной с постоянством ?!
Спасибо
ОТВЕТИТЬ НА Jkohlhepp
1) Я полагаю, OrderProvider
и CustomerProvider
классы содержатся в слое бизнес-логики?
2) Я понял из вашего ответа, что мои предположения по пункту b) верны?
3)
... Я бы проверил, заполнено ли какое-то поле частных заказов или оно пустое. Если это ноль ...
Но, насколько я могу судить, как только код домена должен проверить, было ли order
заполнено приватное поле, и, если это не так, связываясь с OrderProvider, мы уже нарушаем принцип PI ?!
У вас просто есть некоторый класс связывания, который заполняет доменные объекты (скажем, нечто, называемое «хранилище»). Вы можете реализовать ленивую загрузку или любую другую схему когерентности кэша, и доменные объекты не являются мудрыми. Вы отделяете ответственность за заполнение доменных объектов от доменных объектов.
источник