use*_*375 25 java spring design-patterns hibernate
请参阅以下Dao设计模式的组件:
数据访问对象模式或DAO模式用于将低级数据访问API或操作与高级业务服务分开.以下是数据访问对象模式的参与者.
数据访问对象接口 - 此接口定义要对模型对象执行的标准操作.
Data Access Object具体类 - 该类实现上面的接口.该类负责从数据源获取数据,该数据源可以是database/xml或任何其他存储机制.
模型对象或值对象 - 此对象是包含get/set方法的简单POJO,用于存储使用DAO类检索的数据.
当我们有一个具体的课程时,为什么我们需要一个INTERFACE?为什么我们不能直接使用它?这可能是一个天真的问题,但请帮助我明确这一点.不仅在DAO设计模式中,在其他设计模式中,使用INTERFACE也有点令人困惑.我同意这与代码可重用性和减少耦合有关.但任何人都可以请进一步解释.
Mat*_*lár 23
不仅在DAO设计模式中,在其他设计模式中,使用INTERFACE也有点令人困惑.
接口是Java中最常用的概念之一.让我用一个例子解释一下:假设你为汽车设计了一个GPS设备,它可以看到地图并自动将汽车转向地图中所示的方向.这种GPS设备可用于许多汽车,如奔驰,菲亚特等.对于每辆汽车,左右转动的机制可能根据汽车系统的实施而有所不同.因此,这些功能应该由汽车制造商编写,因此这些方法被放置在一个界面中,该界面由汽车制造商根据其汽车的实施来实现.该界面仅包括一组由汽车制造商定义的功能声明(在本例中).得到它了?
要了解有关接口及其有用的原因的更多信息,请阅读本文.
我的问题是:当我们有一个具体的类时,为什么我们需要一个INTERFACE,为什么我们不能直接使用它.
在下面的答案中指出的许多其他好处中,您可以为实现DAO接口的不同数据结构(derby db,大堆栈等)创建许多DAO类.好处是,每个类都可以存储在DAO接口变量中,它称为多态.
Jen*_*ger 13
实际上,当您只有一个实现时,没有必要拥有一个接口.但是在某种情况下,你对这个具体的课程没有依赖是非常实际的:
测试调用DAO的服务:您可以编写一个模拟DAO,其行为与您在测试中所需的一样(例如,模拟没有数据库连接,很难自动重现)
生成一些图层和你的DAO.您可以使用AOP围绕DAO方法生成缓存或事务处理.在这种情况下,您有一个实现DAO接口的对象,但与原始实现无关.
切换数据库技术.如果从MySQL切换到DB2,您只需要编写接口的另一个实现并切换MySQL DAO和DB2 DAO
因此,为您提供DAO和服务接口是一个很好的做法.
我的问题是,当我们有一个具体的课程时,为什么我们需要一个INTERFACE,为什么我们不能直接使用它.
这是简单的抽象.假设您使用Oracle数据库作为数据库.因此具体类将具有访问(CRUD操作)Oracle DB的逻辑.明天,如果您的许可证到期并且您不再想使用Oracle DB,那么您将需要使用MySQL.现在你必须重写已经提到的具体类,并且你必须重写服务层,因为通过直接使用具体类和它的方法,你在服务层和数据访问层之间有紧密耦合.人们应该始终考虑松散耦合的系统.
如果您使用接口而不是具体类,则服务层和数据访问层具有如何交互的契约.因此,服务层不会受到数据层更改的影响,因为合同没有改变,并且它们可以以相同的旧方式进行交互.
归档时间: |
|
查看次数: |
14643 次 |
最近记录: |