DDD:表示表示层和域层类别的命名



我提前道歉,因为这个问题几乎有点愚蠢。尽管如此,我本人不能想出一个很好的解决方案,所以我认为仍然值得问。

当表示对象和域对象应该具有相同名称时,一个人会做什么?DDD样本并未真正解决表示层,因此我无法在那里找到帮助。帐户类也可以说明:

package com.mycompany.myproduct.representation;
public class Account {
    private String uuid;
    private String accountNumber;
    // etc
    @JsonCreator
    public Account(@JsonProperty('uuid) String ....
}

也许该系统有一个约定可以尽可能返回数据。但是我喜欢在这里拥有所有JSON注释。虽然这意味着XML并不真正得到支持,但现在似乎还可以,尽管更灵活的功能会很不错。然后在域层中可能会有其他类似的类:

package com.mycompany.myproduct.domain.model;
import java.uti.UUID;
public class Account extends Entity {
    private UUID id;
    private BigDecimal accountNumber;
    // ... business logic, etc
}

如果这两个数据型都命名为相同,则代码在最终必须满足的情况下将是丑陋/不支持的。作为无处不在的语言的一部分,似乎域层必须具有帐户类。但是外界是用代表对象进行的。如果那是他们的语言,他们为什么要使用不同的东西?

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

我强烈主张在您的域层中命名纯净的"现实世界"。帐户是一个很好的例子。您富裕的Account域实体,其状态,行为和不变性代表现实世界中的一个帐户。

标识符命名在您的域外,也许应该更明确地使用其使用的上下文。例如,我通常使用以下内容:

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

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

最新更新