DDD:表示层和领域层的命名约定 类
DDD: naming convention for Representation Layer and Domain Layer classes
我提前道歉,因为这个问题几乎有点傻。尽管如此,我自己想不出一个好的解决方案,所以我觉得还是值得一问。
当 Representation 对象和 Domain 对象应该同名时,该怎么办? DDD Sample 并没有真正解决表示层,所以我无法在那里找到帮助。一个帐户 class 与任何帐户一样有效,以说明:
package com.mycompany.myproduct.representation;
public class Account {
private String uuid;
private String accountNumber;
// etc
@JsonCreator
public Account(@JsonProperty('uuid) String ....
}
也许这个系统有一个约定,只要有可能,return 数据就是字符串。但我喜欢这里有所有 Json 注释。虽然这意味着 XML 不受真正支持,但目前看来还可以,但如果有更大的灵活性会更好。然后在 Domain 层中可能还有另一个 class 像这样:
package com.mycompany.myproduct.domain.model;
import java.uti.UUID;
public class Account extends Entity {
private UUID id;
private BigDecimal accountNumber;
// ... business logic, etc
}
如果这两种数据类型的名称相同,那么在它们最终必须相遇的情况下,代码将是 ugly/unsupportable。作为通用语言的一部分,域层似乎必须拥有帐户 Class。但是外界是用表象对象来说话的。如果那是他们的语言,他们为什么要使用不同的语言?
由于这两个 class 位于不同的命名空间中,您可以使用相同的名称。但是正如您所提到的,这可能会变得丑陋并且肯定会产生误导。
我强烈主张在您的域层中使用纯 "real-world" 命名。帐户就是一个很好的例子。您丰富的 Account
域实体及其状态、行为和不变量代表现实世界中的一个帐户。
域外的标识符命名对于使用它的上下文可能应该更明确。比如我一般使用如下:
AccountModel
用于 API 响应模型。
AccountTable
对于 ORM class.
AccountDto
对于某些传输对象(尽管请尽量避免 DTO!)
每个人都有自己的标准。我认为保持一致性很重要,尤其是当你与团队合作时。
我提前道歉,因为这个问题几乎有点傻。尽管如此,我自己想不出一个好的解决方案,所以我觉得还是值得一问。
当 Representation 对象和 Domain 对象应该同名时,该怎么办? DDD Sample 并没有真正解决表示层,所以我无法在那里找到帮助。一个帐户 class 与任何帐户一样有效,以说明:
package com.mycompany.myproduct.representation;
public class Account {
private String uuid;
private String accountNumber;
// etc
@JsonCreator
public Account(@JsonProperty('uuid) String ....
}
也许这个系统有一个约定,只要有可能,return 数据就是字符串。但我喜欢这里有所有 Json 注释。虽然这意味着 XML 不受真正支持,但目前看来还可以,但如果有更大的灵活性会更好。然后在 Domain 层中可能还有另一个 class 像这样:
package com.mycompany.myproduct.domain.model;
import java.uti.UUID;
public class Account extends Entity {
private UUID id;
private BigDecimal accountNumber;
// ... business logic, etc
}
如果这两种数据类型的名称相同,那么在它们最终必须相遇的情况下,代码将是 ugly/unsupportable。作为通用语言的一部分,域层似乎必须拥有帐户 Class。但是外界是用表象对象来说话的。如果那是他们的语言,他们为什么要使用不同的语言?
由于这两个 class 位于不同的命名空间中,您可以使用相同的名称。但是正如您所提到的,这可能会变得丑陋并且肯定会产生误导。
我强烈主张在您的域层中使用纯 "real-world" 命名。帐户就是一个很好的例子。您丰富的 Account
域实体及其状态、行为和不变量代表现实世界中的一个帐户。
域外的标识符命名对于使用它的上下文可能应该更明确。比如我一般使用如下:
AccountModel
用于 API 响应模型。AccountTable
对于 ORM class.AccountDto
对于某些传输对象(尽管请尽量避免 DTO!)
每个人都有自己的标准。我认为保持一致性很重要,尤其是当你与团队合作时。