锁定老帖子 主题:贫血的Domain Model
该帖已经被评为精华帖
|
|
---|---|
作者 | 正文 |
发表时间:2008-05-09
DomainObject为什么不能直接用JPA呢,就像使用java.util一样?
再再次提起老帖子 《RichDomainObject的架构设计中,是否可以抛弃DAO?》 http://pig345.iteye.com/blog/79822 |
|
返回顶楼 | |
发表时间:2008-05-09
我就搞不明白, 为什么明明很简单清晰的 DAO 类中的方法一定要使用那么多晦涩的技术 把它们搞成所谓的 rich domain model 呢? 脱裤子放屁? |
|
返回顶楼 | |
发表时间:2008-05-09
coolnight 写道 我就搞不明白, 为什么明明很简单清晰的 DAO 类中的方法一定要使用那么多晦涩的技术 把它们搞成所谓的 rich domain model 呢? 脱裤子放屁? 不明白就要好好学习,好好看看以前的帖子。 |
|
返回顶楼 | |
发表时间:2008-05-10
切 前面的帖子早就看过了 在我看来结论本就很清晰 怎么简单直观怎么来而已 ruby的语言让 rich domain model 对rails比较适合而已 想在java里面也一样,那就用jruby/grails之类去好了,偏要做不适合的事情, 何苦来由? robbin的帖子里面已经把两种的优劣比较清楚的说明白了 |
|
返回顶楼 | |
发表时间:2008-05-10
pig345 写道 DomainObject为什么不能直接用JPA呢,就像使用java.util一样?
再再次提起老帖子 《RichDomainObject的架构设计中,是否可以抛弃DAO?》 http://pig345.iteye.com/blog/79822 给domain对象注入session或者dao最常见的两个反面回答是:形成循环依赖。Domain对象无法脱离数据库存在。但是我并不完全认同这些说法。个人认为Ruby的ActiveRecord其实就是这么干的,而且用得还挺好。但是经过我做过这个实验,我相信,不用DAO,也可以活得挺好,甚至用起来比DAO还方便。 |
|
返回顶楼 | |
发表时间:2008-05-10
coolnight 写道 切 前面的帖子早就看过了 在我看来结论本就很清晰 怎么简单直观怎么来而已 ruby的语言让 rich domain model 对rails比较适合而已 想在java里面也一样,那就用jruby/grails之类去好了,偏要做不适合的事情, 何苦来由? robbin的帖子里面已经把两种的优劣比较清楚的说明白了 java的确是有一些限制,但是还是做得到的。robbin其实也在期待一个java的简洁版本的答案。我相信,我的解决方案比现有的都要简洁。 |
|
返回顶楼 | |
发表时间:2008-05-10
没了解过 rich domain object, 问个简单问题
public RichSet<Task> getProcessingTasks() { return tasks.find("startTime").le(new Date()).find("endTime").isNull(); } 对这个方法, unit test 怎么写 ? |
|
返回顶楼 | |
发表时间:2008-05-10
public class InMemoryEmployeeTest { @Test public void processing_task_should_be_started_but_not_ended() { Employee taowen = new Employee("taowen", 1000, new Department("R&D")); Task processedTask = taowen.assign("develop jfixture framework"); processedTask.finish(processedTask.getStartTime()); taowen.assign("develop ferrum framework1"); taowen.assign("develop ferrum framework2"); taowen.assign("develop ferrum framework3"); taowen.assign("develop ferrum framework4"); taowen.assign("develop ferrum framework5"); taowen.assign("develop ferrum framework6"); taowen.assign("develop ferrum framework7"); taowen.assign("develop ferrum framework8"); Assert.assertEquals(8, taowen.getProcessingTasks().size()); } } |
|
返回顶楼 | |
发表时间:2008-05-10
在我实际的编程里,Domain对象里大量注入了DAO,我并没有觉得有什么不好,好处在于带来了一致的编程体验,唯一的问题在于给测试带来了麻烦,单元测试需要写很多stub。在特定于工作流引擎的情况下,很多同事主张用事件的方式来解除Domain对象与DAO的耦合,但是我觉得没有必要。
楼主的解决方案我觉得还是存在一定局限性的。比如如果Domain对象的业务方法需要执行业务逻辑并插入或更新数据时。 |
|
返回顶楼 | |
发表时间:2008-05-10
taowen 写道 public class InMemoryEmployeeTest { @Test public void processing_task_should_be_started_but_not_ended() { Employee taowen = new Employee("taowen", 1000, new Department("R&D")); Task processedTask = taowen.assign("develop jfixture framework"); processedTask.finish(processedTask.getStartTime()); taowen.assign("develop ferrum framework1"); taowen.assign("develop ferrum framework2"); taowen.assign("develop ferrum framework3"); taowen.assign("develop ferrum framework4"); taowen.assign("develop ferrum framework5"); taowen.assign("develop ferrum framework6"); taowen.assign("develop ferrum framework7"); taowen.assign("develop ferrum framework8"); Assert.assertEquals(8, taowen.getProcessingTasks().size()); } } how about assign method ? |
|
返回顶楼 | |