Grails消灭Dao带来的问题

08-06-04 wlmouse
                   

Grails自己学了一段时间了。感觉快速开发的感觉很不错。以前要干好几天的事情,一天就能完成。不过Grails对领域对象持久化使用AOP的方式让对象自己持久化自己。比如new A().save()。
这样一来就给我们造成可以在控制器里很容易的CRUD,对数据库的访问随时随地都可以,而不用访问Service->Dao的方式处理。而且Grails自己产生的CRUD代码也都在控制器里进行了持久化操作。
对此我感觉很疑惑了。Grails、ROR这类快速框架的层次划分该怎么算?持久化操作该随时自己做还是仍然放Service里?
以前Dao可以看作持久化服务组件。我们通过应用层调用持久化服务。现在持久化服务给领域对象自己了。那么我们在哪里调用呢?是随时使用领域对象来调用还是专门写一个Service封装起来?

                   

1
wlmouse
2008-06-04 11:45

如果需要很多领域对象、服务一起工作,我当然会在Service里写。
传送参数到Service,Service调用服务、领域对象处理数据,最后保存并返回结果。
我主要疑问是最简单的CRUD,而不涉及其他业务的时候还需要到Service里吗?

freebox
2008-06-04 13:08

语言的限制和框架的限制。
RUBY的model似乎自己持有一个连接,这在java里是需要被释放掉的。
正是因为在使用hibernate,所以不可能消灭掉dao,或许它会以另一种形式出现,做为范型基类来简化一些东西。
对于rails当然是要模型自己调用自己了,有血了。但是不要把相同的操作在service再实现一次,web会不知道它应该调用哪一个。
[该贴被freebox于2008-06-04 13:17修改过]

wlmouse
2008-06-05 09:26

Grails确实消灭了Dao。Grails的领域对象也是充血模型。领域对象自己可以用Save、Find等方法自己查询访问自己。Grails只是把Hibernate作为自己的持久化实现GORM的底层。
所以我才要问,基本上只是最简单的CRUD,而不涉及其他事务和其他业务的时候,还需要Service层参与吗?控制器里自己就可以把自己保存或查询。

freebox
2008-06-05 10:57

Service参与之后,web来调用哪一个呢?web会不知所措,web明明看见model是自管理的。所以我才认为对于它们不需要service。

3Go 1 2 3 下一页