免责声明:我对DDD及其相关术语很陌生,所以如果我错误标记任何概念,请纠正我。
我目前正在使用相对简单的域模型的网站(目录项,每个都存储一个CatalogImage项目。)
我的存储库遵循FindbyID(int ID)
GetAll()
等标准界面......
尝试通过ID查找特定图像时出现问题;我最终使用FindImagebyID(int CatalogItemID, int ImgID)
随着新要求的发展,对象图变得更加嵌套,我可以看到大量方法,例如Find{NestedType}ByID(int catalogItemID,.....,int nestedTypeID)
我应该只是从FindAll()方法返回一个IEnumerable,并在更高层使用Linq来形成这些查询吗?或者这会违反SoC吗?
答案 0 :(得分:2)
听起来我觉得你有理由建立多个存储库。
实施例
interface CatalogRepository
{
Catalog FindByID(int ID);
}
interface CatalogImageRepository
{
CatalogImage FindByID(int ID);
}
这将正确地区分您的顾虑,因为每个存储库只负责知道如何处理该特定实体。
答案 1 :(得分:0)
我会在存储库上方的层上过滤模型,如果您愿意,可以使用LINQ。使存储库变得简单。如果您使用LINQ从数据库获取数据,则此方法非常有效,如果您必须使用ADO或其他一些遗留数据访问层,则可能会使存储库变得如此简单。 Linq简化了以便您可以让存储库返回IQueryable并让下一层添加过滤,并且在要求之前不会发生实际的数据检索。这样就可以在像GetImages()这样的存储库上获得一个获取所有图像的方法,下一层可以为特定图像添加过滤。如果你使用ADO,你可能不会想要带回所有图像然后过滤....所以可能是一个权衡。