问题引入:

java web项目开发中spring service层直接调用service层还是dao层,哪个更合理?

一、初步理解

service层作为一个业务逻辑处理层,我若直接调用dao层,那么该业务只取出我所需要的数据,我若调用service层,那么就相当于一个业务依赖于另一个业务,耦合度不就高了?所以,到底哪个更合理,想听听你们的理解

二、分析总结

总结1

按我的经验,service a不能调用b的dao层,只能调用b的service层实现业务。

因为b的service是对dao的CRUD封装,如果是单库的话service或许只是dao的代理,但如果有cache,跨库查询那显然调用dao b是不合理的,可以类比为视频系统调用用户系统,视频系统不关心用户系统的dao层实现机制,只要通过service层查询到用户信息即可。

另外你说的业务依赖确实有这样的困惑,但本身java类之间通讯就是有依赖关系的,或许如果service a业务依赖的service b业务太过于复杂时你可以再次抽象出service b的另外一个interface就ok了。

这个问题非常好,也是我一直想总结分享的,具体可以看下我分享的完整的java项目代码。

总结2

个人觉得肯定是service层了, 如果直接调用dao。违背了MVC模式概念, 而且代码才真正的耦合性增加。换个思想来看,如果你直接调用了dao层. 那么平常的一些业务逻辑处理怎么办? 写在dao里面吗, 万一哪天业务需求改变了. 岂不是连dao全部都要改版.增加了开发的工作量,而且代码重用性不高.  只是个人理解哈.

总结3

调用service层,要严格执行mvc的分层结构,如果不分层直接调用dao层的话,容易出错,后期维护困难.只要严格分层,不会容易出错.

总结4

这个要看业务的复杂程度了,如果比较复杂,变动大,我感觉还是调用service,如果业务变动不太大,那就调用dao实现就可以了吧

三、最后总结

调用service层更合理

service层直接调用service层还是dao层相关推荐

  1. java各层之间的调用关系dao_MVC的dao层、service层和controller层

    1.dao层 dao层主要做数据持久层的工作,负责与数据库进行联络的一些任务都封装在此,dao层的设计首先是设计dao层的接口,然后在Spring的配置文件中定义此接口的实现类,然后就可以再模块中调用 ...

  2. php有没有dao层,php框架开发四(DAO层)_PHP教程

    网站开发不可避免地要对一些数据进行储存,但是存储这些数据各种语言的方式基本上都是:先打开连接,然后执行SQL语句,获取结结果,关闭连接. 那么PHP在操作数据库的时候有哪些方法呢? [php] $co ...

  3. DAO层,Service层,Controller层的作用

    DAO层: DAO层主要是做数据持久层的工作,用来对应数据库实体,负责与数据库进行联络的一些任务都封装在此.主要就是封装一些数据库的增删改查操作,但仅仅是封装了操作,具体的实现并不在dao层里,所以我 ...

  4. Spring中DAO层、Service层、Controller层的定义

    1.dao层 dao层主要做数据持久层的工作,负责与数据库进行联络的一些任务都封装在此,dao层的设计首先是设计dao层的接口,然后在Spring的配置文件中定义此接口的实现类,就可以在模块中调用此接 ...

  5. Spring整合Mybatis之DAO层、Service层开发

    3. Spring整合Mybatis编程DAO层开发 1. 项目引入相关依赖spring mybatis mysql mybatis-spring druid2. 编写spring.xml整合:spr ...

  6. 三层架构编程、DAO层、Entity层、Service层、Controller层

    什么是三层架构编程: 本质上所有的项目(应用程序)都是需要和用户交互,然后产生数据,对数据进行处理,最后将数据存储到硬盘这么个过程 在编程中,可以将这个过程分一下层次,最初只分两层,用户层和数据层,但 ...

  7. SSM框架中各层的含义和联系(Pojos层、Dao层、Service层、Action层......)

    一.pojo层 即Plain Ordinary Java Object,也有人称其为model.domain.bean等,pojo层是对应的数据库表的实体类. 二.1.持久层:Dao层(Mapper) ...

  8. 【转】DAO层,Service层,Controller层、View层

    DAO层:DAO层主要是做数据持久层的工作,负责与数据库进行联络的一些任务都封装在此,DAO层的设计首先是设计DAO的接口,然后在Spring的配置文件中定义此接口的实现类,然后就可在模块中调用此接口 ...

  9. dao层、service层和controller层

    MVC三层架构 dao层 service层 controller层 view层 它们之间的关系: dao层 dao层主要做数据持久层的工作, 负责与数据库进行联络的一些任务都封装在此 dao层的设计 ...

最新文章

  1. LoadRunner之二“集合点”
  2. 2019华为性格测试题_小红书达人力荐!华为 Mate20 Pro红蓝新色最懂女人心
  3. Spark-Sql整合hive,在spark-sql命令和spark-shell命令下执行sql命令和整合调用hive
  4. 【Task】- JVM逃逸分析等待学习任务
  5. java私有属性和私有方法_Java 9中什么是私有的?
  6. 接口 EnvironmentAware
  7. LeetCode 1602. 找到二叉树中最近的右侧节点(BFS)
  8. dataframe 空值替换为0_dataframe取元素方法总结
  9. Delphi 7连接MySql 5 5 15
  10. 基础篇5-python基本数据类型讲解1.1
  11. 学python买什么书-关于 Python 的经典入门书籍有哪些?(python三大经典书)
  12. 字符编码-- Unicode(1991年)
  13. Cisco Packet Tracer安装及简单使用教程(初学者笔记)
  14. 计算机找不到家庭网络连接,电脑找不到家里的wifi无线网络怎么办?
  15. 苹果开发证书导出P12的问题
  16. 苹果中国全系降价:iphone最高降500元,用户可退差价
  17. EOS Error 3090003: provided keys, permissions, and delays do not satisfy declared authoriz
  18. 【 产品经理学习笔记 | 巨详细】1.1-1.4 初识产品经理
  19. Oracle 实用技巧之不知道密码情况下 dblink 的迁移
  20. Python发送验证码短信

热门文章

  1. ssm+Vue计算机毕业设计校园食堂订餐系统(程序+LW文档)
  2. 认识代码审计,流程、方式、范围等一篇了解
  3. 打造最全皮肤,Python采集英雄联盟(LOL)官...
  4. 中国工商银行利用区块链技术实现更快的资产交易
  5. 计算机房应急灯标准,应急灯设置规范有哪些?
  6. eclipse更改代码后reload,不用重启服务器
  7. Android性能调优--StrictMode
  8. source insight 的破解及使用
  9. 深蓝学院-视觉SLAM课程学习课后题
  10. TCP网络编程相关概念原理及其代码实现