贫血对象:一个不包含Save方法的对象
http://jroller.com/page/habuma?entry=spring_2_0_vs_the // business functions
public void save() {
dao.save(this);
}
// injected DAO
private CustomerDao dao;
public void setDao(CustomerDao dao) {
this.dao = dao;
}
偶然听到有人讨论OO设计中,领域对象的贫血模型和非贫血模型的讨论.
有人支持贫血模型,有人支持非贫血模型.
我认为这不是一个值得上升到系统模型设计的问题,理由如下
1.OOA,OOD关心的主要是领域建模,是否包含Save只是对领域的理解范围不同.
2.实际"贫血"的说法很不确切:除了Save,领域对象还有很多其他的丰富多彩的功能,这时对象并不贫血
3.如果领域对象只是值对象,根本没有必要过多的分析,即只有DTO职责的ValueObject才是领域中值得存在的,但不用过度分析
4.Save仅仅是一个方面,将来AOP的实现可以到达这个层次,即将来可以通过AOP来实现Save,那时就不存在贫血不贫血的问题
另外:
A:持久层不是DAO层,持久层的职责是对领域对象的持久化,所以持久层包含DAO,职责却远大于DAO.
B:当我们考虑的仅仅是通过数据库存储业务影响时,即理解持久层是数据存储层时,DAO的实现则完全由数据存储层完成了.
我认为数据存储层不是完整的持久层.
结论:当我们将DAO作为领域内问题是,显然非贫血模型很合理:90%的以上企业应用还行典型的数据库应用.
当我们将持久化剔除出领域时(使用一些持久层框架:比如hibernate)我们就可以使用贫血模型咯.
Trackback: http://tb.donews.net/TrackBack.aspx?PostId=687377