Вы правы, когда заявляете, что для этого потребуется двунаправленная зависимость между слоями, и это почти всегда плохо. Причина этой зависимости заключается в том, что ваш уровень бизнес-логики принимает на себя часть ответственности уровня постоянства (путем реализации Insert()
на уровне бизнес-логики).
Похоже, вы смешиваете два несовместимых понятия.
Во-первых, вы заявляете, что в вашем коде есть три уровня: презентация, бизнес и доступ к данным. Проблема с этим утверждением заключается в том, что вы также утверждаете, что используете активную запись подобный шаблон (unit.Insert()
). Если у вас действительно есть отдельный домен (бизнес) и постоянный уровень (доступ к данным), то доменные объекты не знают, как Insert()
.
Посмотрите на шаблон хранилища . Этот шаблон лучше подходит для создания отдельного персистентного слоя. Если вы используете этот шаблон, вы можете определить «сущность» в слое постоянства и отобразить ваш объект Unit
в слое домена на объект Unit
в слое постоянства. AutoMapper избавит вас от необходимости вручную сопоставлять модель домена с сущностью.