域模型 - 存储库 - 跨子系统的通信

时间:2011-04-06 22:05:58

标签: nhibernate domain-driven-design ddd-repositories

我目前正在设计一个使用多个数据源来消耗所需数据的系统。我试图模拟下面显示的概念(会发布图像,但没有足够的点!),客户可以与许多产品建立联系。客户将存储在“客户子系统”中,产品和客户产品将存储在“产品子系统”中

public class Customer
{
    public string FirstName { get; set; }

    public Guid ID { get; set; }
}
public class CustomerProduct
{
    public Guid ID { get; set; }

    public Customer Customer { get; set; }

    public Product Product { get; set; }
}
public class Product
{
    public string Name { get; set; }

    public double Price { get; set; }

    public Guid ID { get; set; }
}

“客户”实体将物理地保存在必须通过Web服务访问的系统中。 “ConsumerProduct”和“Product”实体将使用NHibernate作为ORM保存在SQL数据库中。

作为设计的一部分,我计划使用存储库将数据持久性技术从域模型中抽象出来。因此,我将有3个存储库接口,ICustomerRepository,ICustomerProductRepository和IProductRepository。然后,我将为CustomerProduct和Product存储库创建一个具体的NHibernate实现,并为Customer存储库创建一个具体的Web服务访问实现。

我正在努力的是,持久存在于不同子系统中的实体将如何相互作用。理想情况下,我想要一个富域模型,其中CustomerProduct实体将具有返回Customer对象的物理“Customer”属性。但是我不知道这是如何工作的,因为需要从不同的数据存储访问Customer实体。

我能看到解决此问题的唯一方法是不在CustomerProduct实体中维护对Customer的完整引用,而只是持有引用,然后每次我需要获取对客户的引用时我会去通过客户存储库。

如果有人就如何解决这个问题提出任何建议,我将不胜感激。

1 个答案:

答案 0 :(得分:3)

相关问题