标题:
[讨论]
与springside的同学们讨论一下dao层和接口
[打印本页]
作者:
bigbusyboy
时间:
2008-2-21 18:05
标题:
与springside的同学们讨论一下dao层和接口
我看了一下ss3的最新代码,对于dao的设计有点想法。
首先,我比较欣赏的是在ss中没有出现接口的滥用,但看到ss3中dao层没有面向接口还是吃了一惊。我觉得这个和解耦有关;泛型dao我第一次看到是在gavin king的书上,16章。里面仍然倡议在dao面向接口编程,容易轻易替换hibernate的实现。甚至每个特定子dao他都定义了接口继承了GenericDAO并单独Hibernate实现。我开始想他是不是把service给省略了,后来发现如果业务复杂的话,在web controller调用之前给dao层上直接包装一层service层是可以而且必须的。
这里
有javaeye上的讨论。
ss3中皈依了JPA,这样也许接口可以省略了?
其次,如果解耦依赖于service即依赖注入到manager的dao的实现不同的话,可否简化到根本就没有子dao的存在?
除了基本的CRUD和少量公共操作外,大量的业务逻辑我觉得应该由manager来完成(当然,不排除在model中有少量逻辑方法,但不涉及持久化),所以我觉得dao层既然不承担解耦作用了,干脆连具体的子类也免去得了。做法就是在GenericDAO中定义了protected Class<T> entityClass,那么我们直接在配置文件中将具体的entityClass注入到GenericDAO中,就拥有了一个可用的子dao,然后把此子dao注入到manager中就可以了。
<bean id="userDao" class="org.springside.modules.orm.jpa.GenericDAO">
<constructor-arg>
<value>org.springside.examples.miniweb.entity.user.User</value>
</constructor-arg>
</bean>
<bean id="userManager" class="org.springside.examples.miniweb.service.user.UserManager" />
至少这么做在manager中是透明的。换句话说,在UserDAO中的业务逻辑交给manager去做,我们不需要特定的DAO了。
谢谢阅读,欢迎讨论。
[
本帖最后由 bigbusyboy 于 2008-2-21 18:07 编辑
]
欢迎光临 SpringSide中文论坛 (http://forum.springside.org.cn/)
Powered by Discuz! 5.0.0