2012-02-18 93 views
0

我阅读这篇文章,并对此有疑问。DDD中的存储库层

存储库模式是一个门面,它将您的持久性 从您的域摘除。一方面它假装是一个集合 - 在 另一方面它涉及你的持久性 实施的技术问题。

这是否意味着您将存储库中的方法命名为如果您创建集合那样。例如:

addDomainModel(...) 
getDomainModel(...) 

等等?或者你会说出这些方法的名称:

saveDomainModel(...) 
fetchDomainModel(...) 

什么是最好的,或最正确的?我应该有方法名称说明它添加什么,或者只是:

add(...) 
get(...) 

它会在正常的集合?

http://devlicio.us/blogs/casey/archive/2009/02/20/ddd-the-repository-pattern.aspx

+0

addDomainModel() getDomainModel() 检查:http://stackoverflow.com/questions/6851147/update-method-for-generic-entity-framework-知识库 – Nathan 2012-02-18 15:50:01

回答

1

对此没有要求。您以最自然的方式使用方法。 通常我的仓库看起来像这样(C#代码)

public interface ImCommandRepository 
{ 
    Entity Get(int id); 
    Entity Get(string name); 
    void Save(Entity value); 
    void Delete(int id); 
} 

public interface ImQueryRepository 
{ 
    PaginatedResult<ViewModel> GetEntitiesA(int skip,int take); 
    PaginatedResult<ViewModel> SearchEntitiesB(string keyword,int skip,int take); 
} 

正如你看到我使用不同的存储库更新持久性和查询持久性。虽然第一个具有非常常见的CRUD方法来处理将被创建/更新/删除的实体,但另一个只是列出或搜索数据库并返回适合视图的模型。您可以根据使用情况添加或命名方法,您不必将存储库实现为集合(即实现预定义的接口),只需将其作为一个对待即可。重要的是保持域不可知的持久性实现。

0

DDD的目标之一就是域专家可以读取代码。所以你应该命名你的方法来使你的代码更具可读性。从这个角度看,在我看来,itemRepository.add(item)甚至items.add(item)比例如itemRepository.saveItem(项目)。看看这个:

How to Write a Repository