Joe*_*oeG 1 java rest domain-driven-design representation
我提前道歉,因为这个问题几乎有点愚蠢。尽管如此,我自己也想不出一个好的解决方案,所以我认为还是值得问一下。
当 Representation 对象和 Domain 对象应该具有相同的名称时该怎么办?DDD 示例并没有真正解决表示层问题,因此我无法在那里找到帮助。Account 类与任何其他类一样可以说明:
package com.mycompany.myproduct.representation;
public class Account {
private String uuid;
private String accountNumber;
// etc
@JsonCreator
public Account(@JsonProperty('uuid) String ....
}
Run Code Online (Sandbox Code Playgroud)
也许这个系统有一个约定,只要有可能,就以字符串形式返回数据。但我喜欢这里有所有 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
}
Run Code Online (Sandbox Code Playgroud)
如果这两种数据类型的名称相同,那么在它们最终必须满足的情况下,代码将变得丑陋/不支持。作为通用语言的一部分,域层似乎必须有帐户类。但外界谈论的是表征对象。如果那是他们的语言,为什么他们要使用不同的语言?
由于这两个类位于不同的命名空间中,因此您可以保留相同的名称。但正如您所提到的,这可能会变得丑陋并且肯定会产生误导。
我强烈主张在域层中使用纯粹的“真实世界”命名。帐户就是一个很好的例子。您的丰富Account域实体及其状态、行为和不变量代表现实世界中的一个帐户。
域外的标识符命名对于使用它的上下文来说可能应该更加明确。例如,我一般使用以下内容:
AccountModel用于 API 响应模型。AccountTable对于 ORM 类。AccountDto对于某些传输对象(尽管请尽量避免 DTO!)每个人都有自己的标准。我认为最重要的是保持一致性,尤其是当你与团队合作时。
| 归档时间: |
|
| 查看次数: |
6269 次 |
| 最近记录: |