您的存储库层应该对您的域有多少了解?

Mat*_*ord 5 c#

在处理存储库时,我通常会尝试保持方法非常通用,但这有时会导致调用更长的方法,或者在服务层创建更具体命名的方法.我的问题是,您的resodory层应该对您的域名有多少了解?

例如,我目前有一个方法如下:

public User GetUniqueByRoleAndRoleProperty<TRole>(string propertyName, object propertyValue)
    {
        ...
    }
Run Code Online (Sandbox Code Playgroud)

我用它来回退具有特定角色和属性的用户,但是它会给存储库太多的知识来获得一个方法,例如:

public User GetArtistBySlug(string slug)
{
    ...
}
Run Code Online (Sandbox Code Playgroud)

Kil*_*oth 2

它应该有足够的知识来完成其工作,仅此而已。如果“slug”是“艺术家”记录的属性,则可以通过 slug 查找艺术家,因为该层已经知道这一点。如果将 slugs 分配给艺术家遵循复杂的规则(想想纹章或类似的东西),那么存储库不应该实现这些,除非你绝对必须使用仅在这个级别上工作的聪明的优化,例如特殊的数据库查询建筑。