【发布时间】:2017-06-01 18:59:45
【问题描述】:
类似的问题已发布在这里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、服务..)
【问题讨论】:
-
为什么这些操作不能只在
client类上?也许该类正在演变成更多的模型而不是简单的 DTO?即使不是,将 some 逻辑放在 DTO 上也不是很糟糕,如果该逻辑合理地属于 该 DTO。如果该类是该逻辑操作的唯一事物,并且它是系统中唯一需要它的地方,那么它就属于该类。 -
我的类客户端类也在外部库中,所以唯一的方法是扩展它,因为我无法编辑它
-
我怀疑这应该在softwareengineering.stackexchange.com 上询问。
-
如果您使用的是 Kotlin,这将是扩展方法的一个很好的示例用例。
-
这个问题是否将 dto 和持久实体混为一谈?