管理实体的关系

时间:2015-08-06 08:41:29

标签: c# oop design-patterns

我在确定负责管理实体内部关系的问题时遇到了一些问题。

说我有一个实体:

public class Customer : IEntity
{
    public string Name { get; set; }
    public List<Asset> Assets { get; set; }
}

还有一个名为CustomerRepository的存储库。客户存储库可以从持久数据源获取客户集合,并从所述数据源添加和删除。

到目前为止,我遵循单一责任原则。但是,当我尝试为客户点入资产时:

CustomerRepository repo = new CustomerRepository();
var customer = repo.FindById(1);
var assets = customer.Assets;

我会发现资产没有填充。答案是在某处填充资产......但在哪里?!

我可以在Customer实体Assets属性中使用另一个资产存储库(AssetRepository)执行更复杂的get方法,但这会违反单一责任原则。客户实体不仅负责构建数据,还负责关系。

我可以直接在存储库中填充Assets,同时创建一个客户实体,但同样,这确实给了存储库更多的责任。现在,它正在创建和填充两组实体,并为Customer分配Assets集合,在管理Customers集合时(例如在Find()或GetActiveCustomers()方法中),它会变得更加低效和难以处理。更不用说资产中是否有其他实体集合,那么存储库将在实体内的实体内填充许多不同类型的实体。

我觉得好像我错过了一些基本的设计,但没有多少谷歌搜索给我答案。

总而言之,应该负责管理实体之间的关系,并为所述实体填充数据。

我还应该提到我没有使用实体框架,因此EF的任何预构建实现部分都不合适,但是调整EF生成的模式是可以接受的。

0 个答案:

没有答案