在哪里放置DTO的行为?对象与数据结构清洁代码

时间:2017-06-01 18:59:46

标签: java object dto behavior

此处发布了类似问题Clean code - how to design this class?

我仍然没有找到答案,我很困惑!

我读过这本书"清洁代码"他说,在某些方面你不应该混合数据结构/对象,无论是没有行为的数据结构还是有行为的对象。

在我的应用程序中,我们有数据传输对象,它们携带来自外部服务的数据。这些DTO只有数据访问器和变更器。所以我将它们视为数据结构类型。

然而罗伯特·马丁在他的书中说client.isMarried()isMarried(client)更好我发现这个逻辑为isMarried函数仅使用来自客户端类的属性。它更清洁。

在我的应用程序的许多方面,我们需要某些DTO上的某些行为,我很困惑在哪里放置这种行为。 我们已经创建了具有业务逻辑的Utils类,如

ClientUtils { 

   boolean isMarried(Client client) { ...} 
   String getCompleteName(Client client) { ...} 

}

这应该转到服务层吗?即使这些方法不操纵输入对象以外的任何其他东西它也不与另一层(DAL,services ..)交互。

2 个答案:

答案 0 :(得分:0)

由于外部库约束导致无法更改Client类,因此我不会对其进行扩展。我建议创建一个“有”客户端成员的ClientInfo包装类。

class ClientInfo {
    private Client myClient;

    public ClientInfo(Client c) {
        myClient = c;
    }

    public boolean isMarried() { ...} 
    public String getCompleteName() { ...}
}

答案 1 :(得分:0)

如果你问我,那么Utils类就意味着你有一个随机的静态方法在某个地方挥之不去,其中包含实际的业务逻辑。为什么不将DTO保留为DTO,并创建一个具有isMarried方法的ClientManager类?

包装外部对象的ClientInfo方法是另一种选择,可能由域驱动安全性驱动。