Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Oop 贫血的域模型是一堆智能服务和没有定义行为的愚蠢对象吗?_Oop_Anemic Domain Model - Fatal编程技术网

Oop 贫血的域模型是一堆智能服务和没有定义行为的愚蠢对象吗?

Oop 贫血的域模型是一堆智能服务和没有定义行为的愚蠢对象吗?,oop,anemic-domain-model,Oop,Anemic Domain Model,我对OOP中的贫血域模型有点困惑。是一种普通的旧X对象(其中X代表您喜欢的语言)的捆绑包,没有行为(和责任) 。。。所有的逻辑都在某些服务中 class SomeStuffService { public static function doSomething(AnemicDomainClass $class) { $class->setProperty(42); } } 这出现在马丁·福勒的文章末尾 一般来说,您在服务中发现的行为越多,就越多 很可能您正

我对OOP中的贫血域模型有点困惑。是一种普通的旧X对象(其中X代表您喜欢的语言)的捆绑包,没有行为(和责任)

。。。所有的逻辑都在某些服务中

class SomeStuffService {
    public static function doSomething(AnemicDomainClass $class) {
        $class->setProperty(42);
    }
}
这出现在马丁·福勒的文章末尾

一般来说,您在服务中发现的行为越多,就越多 很可能您正在剥夺自己的域名利益 模型如果你所有的逻辑都在服务上,那你就把自己弄瞎了

这意味着什么?使用智能对象而不是智能服务更好

一般来说,您在服务中发现的行为越多,就越多 很可能您正在剥夺自己的域名利益 模型如果你所有的逻辑都在服务上,那你就把自己弄瞎了

它意味着编写面向对象的代码,而不是作用于数据的过程代码。面向对象的代码意味着将概念建模到对象中,这些对象知道自己的属性和行为,并且相互协作以表示问题的有效解决方案


使用恰好支持OOP的多范例语言并不意味着您正在编写面向对象的代码。

是的。当模型本身可以完美完成时,它会将行为从模型转移到服务。好吧,你可以说一个贫血的领域模型根本不是OOP。函数式方法和面向对象方法之间的最大区别之一是,在面向对象中,对象具有数据和行为,而在函数式语言中,您具有作用于数据结构的外部化行为。如果你把所有的对象从行为中剥离出来,那么你也许应该完全接受功能范式,并使用适当的语言。
class SomeStuffService {
    public static function doSomething(AnemicDomainClass $class) {
        $class->setProperty(42);
    }
}