Java web疑惑1 - 为什么service 层 和 DAO
有问题才容易更进一步
总体概述:
“接口是一种契约,它可以有多种实现。所以接口之有无取决于具体实现是否需要多样化。如果铁定一种DAO或一种Service只有一种实现,那么抽象出接口的意义不大。然而一些大型应用或许需要DAO和Service的多种实现,为了向上一层隐藏具体实现类,需要采用接口。隐藏具体实现类的创建过程,这有两种方法:一是实用工厂方法,代价是代码量大(每个DAO和Service一个工厂)。二是使用Spring的IoC,实现依赖注入,不需要写额外的代码,这也是引入Spring的理由之一。” --from:某博客
service需要多种实现的情况:
"接口提供了一个公用的方法提供方。 接口是用来规定子类的行为的。
举个例子吧 , 比如有个需求, 需要保存客户信息, 有些客户从网站来, 有些从手机客户端来, 有些从后台管理系统录入, 假设不同来源的客户有不同的处理业务流程, 这个时候我定义接口来提供一个保存客户的方法, 然后不同平台实现我这个保存客户的接口, 以后保存客户的话, 我只用知道这个接口就可以了, 具体调用哪个方法 去实例化具体你需要用的类,这也就是JAVA的多态的体现。 而如果你不用接口的话 , 首先我需要哪个方法 我就去实例化哪个类, 冗余很高, 其次扩展很差。 接口就是一个规范, 其子类都会有他提供的方法。 统一管理。" --from:某CSDN
DAO需要多种实现的情况:
如果项目后期有变更数据之久层的时候,通过更改DAO接口的实现类,就可以完成了。
总结:
“现在编程是面向接口编程,举个例子,假如我的代码以前是哪mybatis写的,现在我要那hibernate写,我就只用修改service的实现类和Dao的实现类。我的Control层调用的是service的接口类,所以我就不用修改Control层的内容。修改Service实现类就是让表示层不依赖于业务层的具体实现,实现业务层与表示层的分离。修改Dao层实现类就是让业务层不依赖持久层,实现业务层与持久层的分离。” --from:某CSDN博客