日历

November 2020
M T W T F S S
 1
2345678
9101112131415
16171819202122
23242526272829
30  

Reply To: 值类型是否有行为?

Home Forums 《冒号课堂》讨论区 值类型是否有行为? Reply To: 值类型是否有行为?

#1247
hui
Keymaster

你的这个问题本质上是使用充血对象模型(rich object model)还是该使用贫血对象模型(anemia object model)的问题。显然书中提到的DTO属于后者,而VO则视具体情况而定。Eric Evan认为,在application layer(service layer)中可用后者,而在Domain Layer(Model Layer)中则建议用前者,否则有让对象式滑到过程式之嫌(可以参考Martin Fowler的这篇文章),是一种anti-pattern。当然,这也只是一种观点,反方观点同样也有市场。具体选择与实际项目、设计者的偏好以及所用的语言、框架等有关。

另外,《冒号课堂》中在提到值类型时,倾向于用运算(operation)而非行为(behavior)来指代对象的方法,毕竟前者的“动感”不如后者,似乎更适用于值类型(值本就是运算的作用对象)。这样你或许更能接受些。

举个常见的例子:Money作为一个典型的值类型,你可以说它是一个被动的实体,不应有任何“行为”,但赋予它一些“运算”往往会很方便,比如add(加法运算),exchange(兑换运算)等等。相比把这些运算与Money分拆开来的做法,这种设计通常更简洁、更优雅些。

 请您评分1星(很差)2星(不行)3星(一般)4星(不错)5星(很棒)