Oop 贫血的域模型是一堆智能服务和没有定义行为的愚蠢对象吗?
我对OOP中的贫血域模型有点困惑。是一种普通的旧X对象(其中X代表您喜欢的语言)的捆绑包,没有行为(和责任) 。。。所有的逻辑都在某些服务中Oop 贫血的域模型是一堆智能服务和没有定义行为的愚蠢对象吗?,oop,anemic-domain-model,Oop,Anemic Domain Model,我对OOP中的贫血域模型有点困惑。是一种普通的旧X对象(其中X代表您喜欢的语言)的捆绑包,没有行为(和责任) 。。。所有的逻辑都在某些服务中 class SomeStuffService { public static function doSomething(AnemicDomainClass $class) { $class->setProperty(42); } } 这出现在马丁·福勒的文章末尾 一般来说,您在服务中发现的行为越多,就越多 很可能您正
class SomeStuffService {
public static function doSomething(AnemicDomainClass $class) {
$class->setProperty(42);
}
}
这出现在马丁·福勒的文章末尾
一般来说,您在服务中发现的行为越多,就越多
很可能您正在剥夺自己的域名利益
模型如果你所有的逻辑都在服务上,那你就把自己弄瞎了
这意味着什么?使用智能对象而不是智能服务更好
一般来说,您在服务中发现的行为越多,就越多
很可能您正在剥夺自己的域名利益
模型如果你所有的逻辑都在服务上,那你就把自己弄瞎了
它意味着编写面向对象的代码,而不是作用于数据的过程代码。面向对象的代码意味着将概念建模到对象中,这些对象知道自己的属性和行为,并且相互协作以表示问题的有效解决方案
使用恰好支持OOP的多范例语言并不意味着您正在编写面向对象的代码。是的。当模型本身可以完美完成时,它会将行为从模型转移到服务。好吧,你可以说一个贫血的领域模型根本不是OOP。函数式方法和面向对象方法之间的最大区别之一是,在面向对象中,对象具有数据和行为,而在函数式语言中,您具有作用于数据结构的外部化行为。如果你把所有的对象从行为中剥离出来,那么你也许应该完全接受功能范式,并使用适当的语言。
class SomeStuffService {
public static function doSomething(AnemicDomainClass $class) {
$class->setProperty(42);
}
}