我第一次使用DDD(.Net)使我的脚变湿了,因为我重新构建了一个遗留企业应用程序的一些核心组件.
我想清除的是,我们如何在适当的DDD架构中实现持久性?
我意识到领域本身是持之以恒的,应该使用“普遍存在的语言”进行设计,当然不会被迫进入本月的DAC的限制甚至物理数据库.
我正确的是,Repository Interfaces存在于Domain程序集中,但是Persistentory Implementation是否存在于持久层中?持久层包含对域层的引用,反之亦然?
Am I correct that the Repository Interfaces live within the Domain
assembly,but the Repository Implementations exist within the
persistence layer? The persistence layer contains a reference to the
Domain layer,never vice versa?
是的,这是一个很好的方法.
Where are my actual repository methods (CRUD) being called from?
考虑到CRUD这个术语可能是一个好主意,因为它是以数据为中心的,可能会引导你进入Generic Repository Trap. Repository有助于管理domain objects的中期和末期.Factories通常负责开始.请记住,当对象从数据库恢复时,它处于DDD视角的中间阶段.代码如下所示:
// beginning Customer preferredCustomer = CustomerFactory.CreatePreferred(); customersRepository.Add(preferredCustomer); // middle life IList<Customer> valuedCustomers = customersRepository.FindPrefered(); // end life customersRepository.Archive(customer);
您可以直接从您的应用程序调用此代码.它可能值得下载并查看Evan的DDD Sample. Unit of Work模式通常用于处理交易和抽象您的ORM的选择.