为什么dao层和service层要用接口
DAO接口
为每个DAO声明接口的好处在于:
- 可以在尚未实现具体DAO的时候编写上层代码,如Service里对DAO的调用
- 可以为DAO进行多实现,例如有JDBCDAO实现,MyBatisDAO实现,而不需要更改上层代码,只需要简单的在Spring的IoC配置里修改一下注入的DAO实现
Service接口
- 可以在尚未实现具体Service情况下编写上层改代码,如Controller对Service的调用
- Spring无论是AOP还是事务管理的实现都是基于动态代理的,而动态代理的实现依赖于接口,所以必须有接口的定义才能使用这些功能
- 可以对Service进行多实现
总的来说,接口的优势就在于规范方法参数,返回值,另外可以实现多态,结合Spring来说接口对于使用Spring的各种功能也是不可或缺的
另外,使用接口对于测试代码也是有好处的,对于mock一个方法来说,我们不需要关注方法的具体实现,因为本来mock就会将方法内部实现置空,我们的关注点集中于方法参数以及返回值,所以使用接口对于快速实现流程上的测试是有好处的.
dao层和service层不需要一一对应
对应不对应都可以。 对应:即,一个service配一个dao,高内聚,体现了一个类即一个服务的思想,虽然夸了层,放在不同的类,但是从上到下浑然一体,与其他dao没有任何交集,是现在新产生的一种思想,缺点是代码量会大一点。 不对应:即,一个service可以配若干个dao,这是基于传统三层的架构演化而来,dao层的代码复用性高,说白了还是三层思想,不体现高内聚的原则,但是代码量会小很多,利于维护。