我提前道歉,因为这个问题几乎有点愚蠢。尽管如此,我本人不能想出一个很好的解决方案,所以我认为仍然值得问。
当表示对象和域对象应该具有相同名称时,一个人会做什么?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!)
每个人都有自己的标准。我相信要保持一致的重要性,尤其是当您与团队合作时。