我非常尊重的一个导师认为简单的Bean是浪费时间的,即使是价值对象也必须包含一些业务逻辑才有用。
另一个人则表示这样的代码很难维护,所有的业务逻辑都必须外部化。
我意识到这个问题是主观的。不过还是想问一下 - 想从更多的角度了解答案。
我非常尊重的一个导师认为简单的Bean是浪费时间的,即使是价值对象也必须包含一些业务逻辑才有用。
另一个人则表示这样的代码很难维护,所有的业务逻辑都必须外部化。
我意识到这个问题是主观的。不过还是想问一下 - 想从更多的角度了解答案。
你最好称它们为Transfer Objects或数据传输对象(DTO)。
早期这个j2ee模式被称为“值对象”,但是他们改变了名称,因为它与此混淆了。
http://dddcommunity.org/discussion/messageboardarchive/ValueObjects.html
为了回答你的问题,我只会在我的DTO中放置最少的逻辑,这些逻辑是为了显示而需要的。这要看情况而定。
哎呀,我刚才是不是说了一个陈词滥调?
设计一个对象时需要问的基本问题是:当其他对象使用/消耗该对象的数据时,控制该对象数据的逻辑是否会有所不同或相同?
如果不同的使用领域需要不同的逻辑,请将其外部化。如果无论对象前往何处都是相同的逻辑,请将其与类一起放置。
我个人的偏好是将所有业务逻辑放在领域模型中,也就是在“真正”的领域对象中。因此,当创建数据传输对象时,它们基本上只是领域对象的(不可变)状态表示,因此不包含任何业务逻辑。它们可以包含克隆和比较方法,但是业务逻辑代码的主体仍然留在领域对象中。
“Korros所说的话。”
值对象 := 一个小而简单的对象,例如货币或日期范围,其相等性不基于身份。
数据传输对象(DTO):= 一种在进程之间携带数据以减少方法调用次数的对象。
这些是Martin Fowler提出的定义,我想让它们更加通俗易懂。