存储库是否应该负责“扁平化”域名?

时间:2009-10-29 17:10:07

标签: c# domain-driven-design repository-pattern

免责声明:我对DDD及其相关术语很陌生,所以如果我错误标记任何概念,请纠正我。

我目前正在使用相对简单的域模型的网站(目录项,每个都存储一个CatalogImage项目。)

我的存储库遵循FindbyID(int ID) GetAll()等标准界面......

尝试通过ID查找特定图像时出现问题;我最终使用FindImagebyID(int CatalogItemID, int ImgID)

等方法

随着新要求的发展,对象图变得更加嵌套,我可以看到大量方法,例如Find{NestedType}ByID(int catalogItemID,.....,int nestedTypeID)

我应该只是从FindAll()方法返回一个IEnumerable,并在更高层使用Linq来形成这些查询吗?或者这会违反SoC吗?

2 个答案:

答案 0 :(得分:2)

听起来我觉得你有理由建立多个存储库。

实施例

interface CatalogRepository
{
    Catalog FindByID(int ID);
}

interface CatalogImageRepository
{
    CatalogImage FindByID(int ID);
}

这将正确地区分您的顾虑,因为每个存储库只负责知道如何处理该特定实体。

答案 1 :(得分:0)

我会在存储库上方的层上过滤模型,如果您愿意,可以使用LINQ。使存储库变得简单。如果您使用LINQ从数据库获取数据,则此方法非常有效,如果您必须使用ADO或其他一些遗留数据访问层,则可能会使存储库变得如此简单。 Linq简化了以便您可以让存储库返回IQueryable并让下一层添加过滤,并且在要求之前不会发生实际的数据检索。这样就可以在像GetImages()这样的存储库上获得一个获取所有图像的方法,下一层可以为特定图像添加过滤。如果你使用ADO,你可能不会想要带回所有图像然后过滤....所以可能是一个权衡。