我正在为新应用中的Repository图层创建参考模型。我从UserRepository开始。我喜欢在repo级别遵循CRUD(Create-Read-Update-Delete)命名约定的想法。这对于GetById方法来说很自然:
public User Read(int userId)
对于搜索方法,似乎感觉不太自然:
public List<User> Read(UserQuery query)
您是否曾尝试遵循存储库的CRUD命名约定?您是否会按照我在上面定义第二个方法签名的方式定义搜索方法签名,或者您是否会遵循不同的命名约定?
答案 0 :(得分:2)
我想提供我的存储库collection semantics。类似于Add()
,Remove()
和一系列Get()
的内容。
不一定是Update()
,因为告诉集合更新元素没有多大意义,你通常从集合中获取对象然后直接修改它。
这来自Domain Driven Design透视图,其中存储库的原始定义是内存中集合的错觉。存储库接口在Domain层中定义,因此不应该引用与持久性相关的东西。
简而言之,Repository只是一大堆您可以查看,添加和删除的内容。
Search()
完全符合这一愿景。您还可以使用Specification pattern使搜索条件更流畅,更可重复使用。