【问题标题】:In which layer should I put a custom repository parameter我应该在哪一层放置自定义存储库参数
【发布时间】:2021-11-29 02:33:54
【问题描述】:

我正在根据 DDD 开发应用程序。所以我在域层中有我的存储库接口。

我的要求是创建一个 searchByParams 方法。我的问题是:这种方法将 DTO 作为参数是否正确? (因为我在this thread读到,DTO应该在应用层)

这是一个更好地说明我的问题的例子:

我有一个模型对象,比如说 Person :

public class Person {
    private String firstName;
    private String lastName;
    private Date birthDate;
    private Date inscriptionDate;
    // Getters and setters ...
}

我想按 firstName、lastName、birthDateBefore、birthDateAfter、inscriptionDateBefore、inscriptionDateAfter 获取人员列表。

我想做的是制作某种包含这些字段的 DTO

public class PersonDTO { // I can also name it PersonResearchFilters
    private String firstName;
    private String lastName;
    private Date birthDateBefore;
    private Date birthDateAfter;
    private Date inscriptionDateBefore;
    private Date inscriptionDateAfter;
    // Getters and setters ...
}

并将其传递给:List<Person> searchByParams(PersonDTO filters)

但这意味着我的 DTO 将在域层中。

  • 可以吗?
  • 是否有更好的方法来设计该要求?
  • 我是不是误会了什么?

【问题讨论】:

    标签: domain-driven-design repository-pattern layer dto ddd-repositories


    【解决方案1】:

    你拥有的是一个没有行为的对象。

    当应用层接收到来自客户端的命令并将结果返回给客户端时,没有行为的对象被称为 DTO(数据传输对象)。

    在域中,您还可以拥有一个没有行为的对象。这通常被归类为值对象。值对象可以有行为但不需要。

    对您的问题的简短回答是使用在您的域中声明的无行为对象来存储存储库查询的参数信息。

    或者,您可能想要探索过滤查询的“规范模式”。

    https://gunnarpeipman.com/ef-core-query-specification/

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-11-18
      • 1970-01-01
      • 2015-10-28
      • 1970-01-01
      • 2012-07-04
      相关资源
      最近更新 更多