论坛首页 Java企业应用论坛

贫血的Domain Model

浏览 46144 次
该帖已经被评为精华帖
作者 正文
   发表时间:2008-05-09  
DomainObject为什么不能直接用JPA呢,就像使用java.util一样?
再再次提起老帖子
《RichDomainObject的架构设计中,是否可以抛弃DAO?》
http://pig345.iteye.com/blog/79822
0 请登录后投票
   发表时间:2008-05-09  

我就搞不明白, 为什么明明很简单清晰的 DAO 类中的方法一定要使用那么多晦涩的技术
把它们搞成所谓的 rich domain model 呢?

脱裤子放屁?
0 请登录后投票
   发表时间:2008-05-09  
coolnight 写道

我就搞不明白, 为什么明明很简单清晰的 DAO 类中的方法一定要使用那么多晦涩的技术
把它们搞成所谓的 rich domain model 呢?

脱裤子放屁?



不明白就要好好学习,好好看看以前的帖子。
0 请登录后投票
   发表时间:2008-05-10  

切 前面的帖子早就看过了
在我看来结论本就很清晰 怎么简单直观怎么来而已
ruby的语言让 rich domain model 对rails比较适合而已

想在java里面也一样,那就用jruby/grails之类去好了,偏要做不适合的事情, 何苦来由?

robbin的帖子里面已经把两种的优劣比较清楚的说明白了



0 请登录后投票
   发表时间:2008-05-10  
pig345 写道
DomainObject为什么不能直接用JPA呢,就像使用java.util一样?
再再次提起老帖子
《RichDomainObject的架构设计中,是否可以抛弃DAO?》
http://pig345.iteye.com/blog/79822

给domain对象注入session或者dao最常见的两个反面回答是:形成循环依赖。Domain对象无法脱离数据库存在。但是我并不完全认同这些说法。个人认为Ruby的ActiveRecord其实就是这么干的,而且用得还挺好。但是经过我做过这个实验,我相信,不用DAO,也可以活得挺好,甚至用起来比DAO还方便。
0 请登录后投票
   发表时间:2008-05-10  
coolnight 写道

切 前面的帖子早就看过了
在我看来结论本就很清晰 怎么简单直观怎么来而已
ruby的语言让 rich domain model 对rails比较适合而已

想在java里面也一样,那就用jruby/grails之类去好了,偏要做不适合的事情, 何苦来由?

robbin的帖子里面已经把两种的优劣比较清楚的说明白了




java的确是有一些限制,但是还是做得到的。robbin其实也在期待一个java的简洁版本的答案。我相信,我的解决方案比现有的都要简洁。
0 请登录后投票
   发表时间:2008-05-10  
没了解过 rich domain object, 问个简单问题

   public RichSet<Task> getProcessingTasks() {  
        return tasks.find("startTime").le(new Date()).find("endTime").isNull();  
    } 


对这个方法, unit test 怎么写 ?
0 请登录后投票
   发表时间: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());
    }
}
0 请登录后投票
   发表时间:2008-05-10  
在我实际的编程里,Domain对象里大量注入了DAO,我并没有觉得有什么不好,好处在于带来了一致的编程体验,唯一的问题在于给测试带来了麻烦,单元测试需要写很多stub。在特定于工作流引擎的情况下,很多同事主张用事件的方式来解除Domain对象与DAO的耦合,但是我觉得没有必要。
楼主的解决方案我觉得还是存在一定局限性的。比如如果Domain对象的业务方法需要执行业务逻辑并插入或更新数据时。
0 请登录后投票
   发表时间: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 ?
0 请登录后投票
论坛首页 Java企业应用版

跳转论坛:
Global site tag (gtag.js) - Google Analytics