当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拥有帐户类。但是外部世界就代表对象进行谈判。如果这是他们的语言,他们为什么要使用不同的东西?
答案 0 :(得分:1)
由于这两个类位于不同的名称空间中,因此您可以使用相同的名称。但正如你所提到的,这可能会变得丑陋并且肯定会产生误导。
我强烈主张纯粹的,真实的世界"在您的域图层中命名。帐户就是一个很好的例子。您的丰富的Account
域实体及其状态,行为和不变量代表了现实世界中的帐户。
域外的标识符命名应该更明确地指向使用它的上下文。例如,我通常使用以下内容:
AccountModel
获取API响应模型。AccountTable
用于ORM课程。AccountDto
对于某些转移对象(尽管请尝试避免使用DTO!)每个人都有自己的标准。我认为保持一致性非常重要,特别是在与团队合作时。