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

时间:2015-05-06 19:03:41

标签: java rest domain-driven-design representation

我提前道歉,因为这个问题几乎有点傻。尽管如此,我自己也无法提出一个好的解决方案,所以我觉得还是值得一提。

当Representation对象和Domain对象具有相同名称时,该怎么办? DDD Sample并没有真正解决表示层问题,所以我无法在那里找到帮助。 Account类和以下任何一个类似:

package com.mycompany.myproduct.representation;

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

    @JsonCreator
    public Account(@JsonProperty('uuid) String ....
}

也许这个系统有一个约定,尽可能将数据作为String返回。但是我喜欢这里有所有的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
}

如果这两个数据类型的名称相同,则代码在最终必须满足的情况下将是丑陋/不可支持的。作为泛在语言的一部分,看起来像Domain Layer HAS拥有帐户类。但是外部世界就代表对象进行谈判。如果这是他们的语言,他们为什么要使用不同的东西?

1 个答案:

答案 0 :(得分:1)

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

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

域外的标识符命名应该更明确地指向使用它的上下文。例如,我通常使用以下内容:

  • AccountModel获取API响应模型。
  • AccountTable用于ORM课程。
  • AccountDto对于某些转移对象(尽管请尝试避免使用DTO!)

每个人都有自己的标准。我认为保持一致性非常重要,特别是在与团队合作时。