什么是领域模型,充血模型,贫血模型?

Macrotea 发布于 2011/06/11 09:01
阅读 3K+
收藏 6

小生所识甚少

然见网上讨论甚激烈

用词专业,名词较多,不易理解

因此发帖于此,盼牛人用通俗易懂之句解惑之,领域模型,充血模型,贫血模型.

若能简单举例,小弟感激不尽.

加载中
0
asdfsx
asdfsx

简单说就是要不要在dao中加入业务逻辑

可以去搜索下领域建模

iteye上应该有不少讨论帖

0
jianglibo
jianglibo
通过实际的例子来表述就很简单了。以我的诗篇在线建站系统来说,如果site对象仅仅具有getter和setter方法,那就是贫血的。如果site对象里面加入:site.getSection(int sid),site.findSection(String sectionname),site.getArticlePage(int pn),site.getArticleByFlag(string flag,int pn)。这样一来就变成充血的了。比如你有一个util函数,将你的对象作为参数来完成必要的功能,这样的对象往往是贫血的,如果你可以直接命令对象完成任务,往往是充血的。
0
戴威
戴威
只做数据存储的模型就是贫血的,如果牵扯到业务逻辑活着数据库交互,就算充血的。
0
CheckStyle
CheckStyle
06年的时候对此还感兴趣过一阵,现在看来,都是浮云.
戴威
戴威
基本就是几个语言互相攻击的时候用
0
宏哥
宏哥

一看到 java那一大堆set 和get,我不知道的和一个pubilc的变量有什么区别

 

宏哥
宏哥
其实全部都public不是挺好的
戴威
戴威
额,el表达式只认get方法
0
ValueError
ValueError

我的理解不是说 DAO 和领域层的分离喔,我觉得无论是贫血模型还是充血模型,和 DAO 分离与否关系不大。(例如采用 ActiveRecord 作为领域模型,无论充血与否,DAO 都不分离的)

个人认为,区别所在还是在服务层和领域模型,要看业务逻辑是以过程脚本的形式集中在服务层而领域模型基本没有业务逻辑(贫血);还是服务层仅仅作为一个外观,领域逻辑集中在领域模型内部(充血)。

不知这样理解是否正确?

0
ValueError
ValueError

引用来自“宏哥”的答案

一看到 java那一大堆set 和get,我不知道的和一个pubilc的变量有什么区别

 

我觉得这是语言设计的缺失吧,C# 的属性就是个很甜的语法糖。

不过 Java 的 getter/setter 可以工具生成,也带来不了多少麻烦吧。

0
宏哥
宏哥

引用来自“无知的 TonySeek”的答案

引用来自“宏哥”的答案

一看到 java那一大堆set 和get,我不知道的和一个pubilc的变量有什么区别

 

我觉得这是语言设计的缺失吧,C# 的属性就是个很甜的语法糖。

不过 Java 的 getter/setter 可以工具生成,也带来不了多少麻烦吧。

DAO还不就是这种东西的产物?

很多语言根本不需要set,get,也就不需要DAO了

ValueError
ValueError
不明白意思……
0
超级奶爸老谭
超级奶爸老谭

引用来自“宏哥”的答案

引用来自“无知的 TonySeek”的答案

引用来自“宏哥”的答案

一看到 java那一大堆set 和get,我不知道的和一个pubilc的变量有什么区别

 

我觉得这是语言设计的缺失吧,C# 的属性就是个很甜的语法糖。

不过 Java 的 getter/setter 可以工具生成,也带来不了多少麻烦吧。

DAO还不就是这种东西的产物?

很多语言根本不需要set,get,也就不需要DAO了

其实getter与setter还是有作用的,可以把一些业务逻辑封装在里面。而且修改的时候,对外提供的方法名称不变,相对稳定…
返回顶部
顶部