java - DDD 中的存储库层

标签 java jakarta-ee domain-driven-design

我读了这篇文章,但有一个疑问。

The Repository pattern is a Facade, that abstracts your persistence away from your Domain. On one side it pretends to be a collection – on the other it deals with the technical concerns of your persistence implementation.

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

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

等等?或者您会命名这些方法吗:

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

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

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

就像在普通集合中一样吗?

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

最佳答案

没有这方面的要求。您可以以最自然的使用方式命名这些方法。 通常我的存储库看起来像这样(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 方法来处理将要创建/更新/删除的实体,但另一个方法只是列出或搜索数据库并返回适合 View 的模型。您可以根据使用情况添加或命名方法,您不必将存储库实现为一个集合(即实现预定义的接口(interface)),只需将其视为一个集合即可。重要的是要保持域与持久性实现无关。

关于java - DDD 中的存储库层,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9342519/

相关文章:

java - "Failed to load Premain-Class manifest attribute"尝试使用 java 代理获取对象的大小时

java - 字符串数据,右截断 - Hibernate with Spring Boot

java - SQLite 的动态选择语句

java - 如何在 servlet 线程中获取新的有状态 session bean?

domain-driven-design - 不禁将域实体视为浪费。为什么?

java - 显示来自 JSON Android 的 GridView 图像

java - Scriptlet 将任意代码插入 servlet 的 _jspService 方法

domain-driven-design - CQRS/DDD : The dummy blog/post/category/tags example

asp.net-mvc-3 - 获取所有聚合根实体子实体?

database - 如何建立多语言网站?