DDD中的存储库层

时间:2012-02-18 15:39:18

标签: java java-ee domain-driven-design

我读过这篇文章,我对此有疑问。

  

Repository模式是一个Facade,它抽象了你的持久性   远离你的域名。一方面,它假装是一个集合   另一个涉及你坚持不懈的技术问题   实施

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

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

等等?或者你会说出方法:

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

什么是最好的,或者最正确的?我是否应该使用方法名称来说明它添加的内容,或者只是:

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

就像在正常的收藏中那样?

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

2 个答案:

答案 0 :(得分: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方法可以用于创建/更新/删除实体,但另一个只是列出或搜索数据库并返回适合视图的模型。您可以根据用途添加或命名方法,您不必将存储库实现为集合(即实现预定义的接口),只需将其视为一个。重要的是保持域与持久性实现无关。

答案 1 :(得分:0)

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

How to Write a Repository