DDD:表示层和域层类的命名约定

Joe*_*oeG 1 java rest domain-driven-design representation

我提前道歉,因为这个问题几乎有点愚蠢。尽管如此,我自己也想不出一个好的解决方案,所以我认为还是值得问一下。

当 Representation 对象和 Domain 对象应该具有相同的名称时该怎么办?DDD 示例并没有真正解决表示层问题,因此我无法在那里找到帮助。Account 类与任何其他类一样可以说明:

package com.mycompany.myproduct.representation;

public class Account {
    private String uuid;
    private String accountNumber;
    // etc

    @JsonCreator
    public Account(@JsonProperty('uuid) String ....
}
Run Code Online (Sandbox Code Playgroud)

也许这个系统有一个约定,只要有可能,就以字符串形式返回数据。但我喜欢这里有所有 Json 注释。虽然这意味着 XML 并未得到真正的支持,但目前看来还可以,不过如果有更多的灵活性就更好了。那么在Domain层中可能还有另一个这样的类:

package com.mycompany.myproduct.domain.model;

import java.uti.UUID;

public class Account extends Entity {
    private UUID id;
    private BigDecimal accountNumber;
    // ... business logic, etc
}
Run Code Online (Sandbox Code Playgroud)

如果这两种数据类型的名称相同,那么在它们最终必须满足的情况下,代码将变得丑陋/不支持。作为通用语言的一部分,域层似乎必须有帐户类。但外界谈论的是表征对象。如果那是他们的语言,为什么他们要使用不同的语言?

Dav*_*New 6

由于这两个类位于不同的命名空间中,因此您可以保留相同的名称。但正如您所提到的,这可能会变得丑陋并且肯定会产生误导。

我强烈主张在域层中使用纯粹的“真实世界”命名。帐户就是一个很好的例子。您的丰富Account域实体及其状态、行为和不变量代表现实世界中的一个帐户。

域外的标识符命名对于使用它的上下文来说可能应该更加明确。例如,我一般使用以下内容:

  • AccountModel用于 API 响应模型。
  • AccountTable对于 ORM 类。
  • AccountDto对于某些传输对象(尽管请尽量避免 DTO!)

每个人都有自己的标准。我认为最重要的是保持一致性,尤其是当你与团队合作时。