说起应用分层,controller,service, mapper三层。很多人其实并没有把他们职责划分开,在很多代码中,controller做的逻辑比service还多,service往往当成透传了,这其实是很多人开发代码都没有注意到的地方,反正功能也能用,至于放哪无所谓呗。这样往往造成后面代码无法复用,层级关系混乱,对后续代码的维护非常麻烦。

的确在这些人眼中分层只是一个形式,前辈们的代码这么写的,其他项目代码这么写的,那么我也这么跟着写。但是在真正的团队开发中每个人的习惯都不同,写出来的代码必然带着自己的标签。

有的人习惯controller写大量的业务逻辑,有的人习惯在service中之间调用远程服务,这样就导致了每个人的开发代码风格完全不同,所以一个好的应用分层需要具备以下几点:方便后续代码进行维护扩展;分层的效果需要让整个团队都接受;各个层职责边界清晰。

每一个层基本都自己对应的领域模型,这样就导致了有些人过于追求每一层都是用自己的领域模型,这样就导致了一个对象可能会出现3次甚至4次转换在一次请求中,当返回的时候同样也会出现3-4次转换,这样有可能一次完整的请求-返回会出现很多次对象转换。如果在开发中真的按照这么来,恐怕就别写其他的了,一天就光写这个重复无用的逻辑算了吧。

所以我们得采取一个折中的方案:

1、允许Service/Manager可以操作数据领域模型,对于这个层级来说,本来自己做的工作也是做的是业务逻辑处理和数据组装。

2、Controller/TService层的领域模型不允许传入DAO层,这样就不符合职责划分了。

3、同理,不允许DAO层的数据传入到Controller/TService。

总的来说业务分层对于代码规范是比较重要,决定着以后的代码是否可复用,是否职责清晰,边界清晰。当然这种分层其实见仁见智, 团队中的所有人的分层习惯也不同,所以很难权衡出一个标准的准则,总的来说只要满足职责逻辑清晰,后续维护容易,就是好的分层。

欢迎大家在评论区评论留言,小编会及时给大家解答疑惑的

三层调用关系_你真正的了解MVC三层架构开发模式吗相关推荐

  1. java 调用关系_【Java基础】几种简单的调用关系与方法

    直接上代码吧. class lesson4AB //同一个类下的public修饰的方法A,B可以相互调用 { public void A() { B();//等价于this.B(); } public ...

  2. java 字节码查看_一种查看java字节码时显示方法调用关系图的方法与流程

    本发明涉及一种代码逻辑分析方法,具体涉及一种查看java字节码时显示方法调用关系图的方法. 背景技术: 目前软件反编译领域有不少对可执行文件进行反编译的工具如IDA,也有对Java代码生成的中间码文件 ...

  3. mysql 三层架构开发_从三层架构迈向领域驱动设计(转载)

    三层架构 严格分层架构模式的特点是上层只能访问相邻的下层,其他层次间的调用都不允许.三层架构就是一种严格分层模式,它把职责划分为界面展示.业务逻辑.数据访问三层,还有一个业务实体,前面三层都要依赖它, ...

  4. GNU cflow实现调用关系分析

    GNU cflow是一个GNU的开源项目,有关网站(官网)如下: 官网-GNU cflow 下载-http://ftp.gnu.org/gnu/cflow/ 手册-GNU cflow manual c ...

  5. IO流-节点流和处理流(涵盖底层调用关系)

    一.节点流和处理流概览 二.节点流和处理流的区别关系 三.推导节点流和处理流的调用关系 (一)总的父类Reader (二)2个节点流 1.文件节点流 2.字符串节点流 (三)处理流 (四)测试类 四. ...

  6. 算力和硬件的关系_硬件算力需求飙升,为什么软件生意越来越火?

    人工智能进一步推动了对算力的渴求,硬件的世界已经发生了极大的颠覆,不论是数据的处理方式还是计算架构的延伸,除了CPU.GPU.DSP.FPGA等,还涌现出各种各样的AI加速器.除了传统的芯片提供商,算 ...

  7. relay.build调用关系

    relay.build调用关系 在用TVM优化过程中,常见demo如下图: relay.build背后的调用机制梳理如下: python中的build函数实现如下,此方法实际调用了BuildModul ...

  8. 自动分析源代码,创建函数地图展示调用关系

    极客讨论器现在可以自动分析 C/C++/Java/C#/Python/Objective-C 语言源代码并生成表示调用关系的函数地图,并使用"旅游"模式,在函数地图中浏览代码.如图 ...

  9. 框架、文档、视图类之间的调用关系

    在多文档MFC应用程序执行过程中,创建了多于一个的文档类.视图类.子框架类对象和一个主框架类.应用类对象.这些对象之间是通过一定的方式联系在一起的,在应用程序设计中,时常需要通过这些对象之间的关系来实 ...

最新文章

  1. python并发入门(part5 event对象)
  2. 如何在PySide中使用qrc资源文件
  3. preCornerDetect函数
  4. 定时器:SetTimer
  5. htcvr设备计算机配置,准备买HTC VIVE了?来测试一下你的电脑配置够不够
  6. Unknown column 'user_uid' in 'field list' sql错误解决过程
  7. (17)vivado2019.1不能生成bit文件解决方法(学无止境)
  8. [树莓派] : 如何用树莓派利用摄像头进行简单的人脸识别【how to use IR camera +raspberrypi 3b+ in python】
  9. 在html文件中使用支持FLV、HLS、RTSP、WS-FLV/WS-RTSP、WEBRTC、HEVC/H265的永久免费H5直播点播播放器SkeyeWebPlayer.js
  10. SQL server常见问题
  11. 【软件收集】四款免费录播录屏演示有关的软件
  12. 【云原生之Docker实战】使用Docker部署Snipe-It固定资产管理平台
  13. MySQL 不等于的三种表示及区别
  14. 0.91英寸OLED初始化程序
  15. java8中新判空方法之Optional类的使用
  16. 小游戏制作QQ宠物系列1 ---- 吹泡泡
  17. 操作系统笔记(3)——同步与互斥
  18. Qt基于QGraphicsView 实现四个教具之一直尺(一)
  19. Kotlin学习教程(一)
  20. RDO远程桌面管理工具

热门文章

  1. 90-30-020-源码-任务调度-Kylin任务调度
  2. kerberos安装配置与使用
  3. 【Antlr】识别常见的词法结构
  4. 【Kafka】【未解决】kafka反序列化数据报错jackson2 JsonParseException: Invalid UTF-8 middle byte 0xc0
  5. SpringBoot的Bean之@ConditionalOnBean与@ConditionalOnClass
  6. 【CDH】ClouderaManager集群报警,堆转储目录/tmp 或日志目录/var/log 可用空间小于 5.0 吉字节
  7. 21-win10下ElasticSearch.6.1.0安装SQL插件
  8. 配置监控中心-及管理平台
  9. 为什么强烈不推荐使用stop、suspend方法来中断线程?
  10. Net-DataGridView