DAO模式的最佳实践?

Saw*_*yer 16 architecture dao design-patterns domain-driven-design

我见过很多代码都使用了service-dao模式,我不知道这个模式的来源.它强制执行前层调用服务,然后将一些服务任务委托给dao.

我想问一下 :

  1. DAO层是否完全与数据访问相关的任务?异常封装之类的东西怎么样?
  2. 有没有其他模式可以用来代替这个或者比这更好?
  3. 我认为pojo域模型和事务脚本使得即使是简单的问题变得复杂,是否有可能完全消除dao层?

Ron*_*erg 16

理想情况下,您的DAO层"抽象"访问某些数据存储系统(数据库,文件系统,LDAP目录......).因此,从这个意义上讲,它仅用于与数据访问相关的任务.但是,您还可以使用DAO层访问Web应用程序或应用程序外部的其他组件.这是关键点,它提供了对某些外部组件的访问.

主要思想是没有DAO层的实现细节可以转移到更高层(隔离).思考这个问题的一个很好的起点是:如果我计划更换我的DAO层提供访问权限的组件(例如数据库),我还需要做什么?例如,您在XML文件中有一些数据,并且您计划将数据迁移到数据库.

假设您有各种与XML相关的异常,这些异常会逃脱您的DAO层.然后,将XML层迁移到数据库层变得非常困难.但是,如果您已经封装了DAO层的所有实现细节,那么这将变得更加容易.

最后,它是关于代码的可维护性.您对特定层(服务,DAO,...)的实现细节的依赖性越小,代码的可维护性就越好.