此处发布了类似问题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 ..)交互。
答案 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
方法是另一种选择,可能由域驱动安全性驱动。