本文转载于网络,以为写得很透彻。java
dao完成链接数据库修改删除添加等的实现细节,例如sql语句是怎么写的,怎么把对象放入数据库的。service层是面向功能的,一个个功能模块好比说银行登记并完成一次存款,UI要把请求给service层,而后service曾将这一个case分解成许多步骤调用底层的实现完成此次存款,dao就是下面那层。
dao就是把数据存起来,之因此service的方法会有雷同只不过是由于service得需求不是很复杂不用再service里面完成太多包装或者处理过程能够直接调用dao的方法就完成的请求处理例如就要save一个对象,而这个对象是封装好的,dao里面有个方法专门save封装好的对象因而service的方法就仅仅调用一下就o了,函数签名天然很像了service不能直接接触持久层,而dao是持久层或者直接访问持久层有的时候只是为了分层清楚,为了未来scale up的时候方便咱们才把service和dao分开,其实不必分开的。
---------------------------------------------------------------
根据不一样项目的复杂度来肯定是否须要分层,若是是小项目的话,2层应该就够了,分层是为了很好的解耦,和程序的可观性,还有就是很好的项目分工,若是遇到某个客户须要修改某个查询结果集合,你须要修改的首先是dao的SQL,接着是service的相应调用方法来为VIEW服务,
若是是分层清楚的话,只须要在DAO中加一个方法,在SERVICE中改变起调用的方法接口,须要改动的不大,
-----------------------------------------------------------------
在用ssh进行开发中,通常状况下都是分为三层:web层spring层dao层,基本的流程是首先定义一个dao接口,而后去实现这个接口,在定义同类型的service接口(service接口与dao接口是彻底同样),再实现service接口,(这是是用dao接口去注入),而后web层在去调用service层。
DAO层的职责是纯粹的数据操做, 若是是hibernate, 那就只须要相似getHibernateTemplate().save, update, delete, findyBy*这类的方法而service层是负责写业务逻辑的, 纯粹的业务逻辑, 其中的数据操做是经过注入的DAO实现的, 可是业务是在这层。
若是你的service层与dao层代码严重重复,这说明你的业务比较简单。复杂业务这个结构的优点就很明显了service层的做用是对dao取得的数据作操做 更贴近于业务的实现 dao只是数据的增删改查,对小型的应用来讲,SSH 确实提升了开发成本和开发周期,可是却有利于扩展和维护。
利用spring 的ioc 解偶 使业务逻辑与持久层松偶合。
-----------------------------------------------------------------
分层并不必定是绝对的,具体的仍是要根据项目实际状况来定,不是么?若是是理想状态的话,恐怕在你的service层上面还要再多加一层的。可是你以为有必要吗?
实际上,对于小项目来讲,直接经过dao来进行操做也不是不能够,搞得太复杂,也没有必要。这是个人我的感受。就好像po和dto同样,有的人直接就将po传到web层,有的还要加一个转换,由dto进行数据传递。显而后者实现更理想,可是你不以为这样很麻烦吗。
微软的。net号称有11层(仍是多少层来着,反正层不少),可是实际能分出多少层,仍是根据开发者本身状况来定了。要注意代码是死的,人是活的,不要死套框架,不然本身极可能也会陷入开发误区。
另外,咱们目前设计的一些领域对象,绝大多数都是贫血的。只是一个简单的javabean,不包含任何逻辑在里面。怎么设计才更符合oo的思想,你也能够参考下domain object方面的讨论。这个在javaeye上有不少。web