三层调用关系_你真正的了解MVC三层架构开发模式吗
说起应用分层,controller,service, mapper三层。很多人其实并没有把他们职责划分开,在很多代码中,controller做的逻辑比service还多,service往往当成透传了,这其实是很多人开发代码都没有注意到的地方,反正功能也能用,至于放哪无所谓呗。这样往往造成后面代码无法复用,层级关系混乱,对后续代码的维护非常麻烦。
的确在这些人眼中分层只是一个形式,前辈们的代码这么写的,其他项目代码这么写的,那么我也这么跟着写。但是在真正的团队开发中每个人的习惯都不同,写出来的代码必然带着自己的标签。
有的人习惯controller写大量的业务逻辑,有的人习惯在service中之间调用远程服务,这样就导致了每个人的开发代码风格完全不同,所以一个好的应用分层需要具备以下几点:方便后续代码进行维护扩展;分层的效果需要让整个团队都接受;各个层职责边界清晰。
每一个层基本都自己对应的领域模型,这样就导致了有些人过于追求每一层都是用自己的领域模型,这样就导致了一个对象可能会出现3次甚至4次转换在一次请求中,当返回的时候同样也会出现3-4次转换,这样有可能一次完整的请求-返回会出现很多次对象转换。如果在开发中真的按照这么来,恐怕就别写其他的了,一天就光写这个重复无用的逻辑算了吧。
所以我们得采取一个折中的方案:
1、允许Service/Manager可以操作数据领域模型,对于这个层级来说,本来自己做的工作也是做的是业务逻辑处理和数据组装。
2、Controller/TService层的领域模型不允许传入DAO层,这样就不符合职责划分了。
3、同理,不允许DAO层的数据传入到Controller/TService。
总的来说业务分层对于代码规范是比较重要,决定着以后的代码是否可复用,是否职责清晰,边界清晰。当然这种分层其实见仁见智, 团队中的所有人的分层习惯也不同,所以很难权衡出一个标准的准则,总的来说只要满足职责逻辑清晰,后续维护容易,就是好的分层。
欢迎大家在评论区评论留言,小编会及时给大家解答疑惑的
三层调用关系_你真正的了解MVC三层架构开发模式吗相关推荐
- java 调用关系_【Java基础】几种简单的调用关系与方法
直接上代码吧. class lesson4AB //同一个类下的public修饰的方法A,B可以相互调用 { public void A() { B();//等价于this.B(); } public ...
- java 字节码查看_一种查看java字节码时显示方法调用关系图的方法与流程
本发明涉及一种代码逻辑分析方法,具体涉及一种查看java字节码时显示方法调用关系图的方法. 背景技术: 目前软件反编译领域有不少对可执行文件进行反编译的工具如IDA,也有对Java代码生成的中间码文件 ...
- mysql 三层架构开发_从三层架构迈向领域驱动设计(转载)
三层架构 严格分层架构模式的特点是上层只能访问相邻的下层,其他层次间的调用都不允许.三层架构就是一种严格分层模式,它把职责划分为界面展示.业务逻辑.数据访问三层,还有一个业务实体,前面三层都要依赖它, ...
- GNU cflow实现调用关系分析
GNU cflow是一个GNU的开源项目,有关网站(官网)如下: 官网-GNU cflow 下载-http://ftp.gnu.org/gnu/cflow/ 手册-GNU cflow manual c ...
- IO流-节点流和处理流(涵盖底层调用关系)
一.节点流和处理流概览 二.节点流和处理流的区别关系 三.推导节点流和处理流的调用关系 (一)总的父类Reader (二)2个节点流 1.文件节点流 2.字符串节点流 (三)处理流 (四)测试类 四. ...
- 算力和硬件的关系_硬件算力需求飙升,为什么软件生意越来越火?
人工智能进一步推动了对算力的渴求,硬件的世界已经发生了极大的颠覆,不论是数据的处理方式还是计算架构的延伸,除了CPU.GPU.DSP.FPGA等,还涌现出各种各样的AI加速器.除了传统的芯片提供商,算 ...
- relay.build调用关系
relay.build调用关系 在用TVM优化过程中,常见demo如下图: relay.build背后的调用机制梳理如下: python中的build函数实现如下,此方法实际调用了BuildModul ...
- 自动分析源代码,创建函数地图展示调用关系
极客讨论器现在可以自动分析 C/C++/Java/C#/Python/Objective-C 语言源代码并生成表示调用关系的函数地图,并使用"旅游"模式,在函数地图中浏览代码.如图 ...
- 框架、文档、视图类之间的调用关系
在多文档MFC应用程序执行过程中,创建了多于一个的文档类.视图类.子框架类对象和一个主框架类.应用类对象.这些对象之间是通过一定的方式联系在一起的,在应用程序设计中,时常需要通过这些对象之间的关系来实 ...
最新文章
- python并发入门(part5 event对象)
- 如何在PySide中使用qrc资源文件
- preCornerDetect函数
- 定时器:SetTimer
- htcvr设备计算机配置,准备买HTC VIVE了?来测试一下你的电脑配置够不够
- Unknown column 'user_uid' in 'field list' sql错误解决过程
- (17)vivado2019.1不能生成bit文件解决方法(学无止境)
- [树莓派] : 如何用树莓派利用摄像头进行简单的人脸识别【how to use IR camera +raspberrypi 3b+ in python】
- 在html文件中使用支持FLV、HLS、RTSP、WS-FLV/WS-RTSP、WEBRTC、HEVC/H265的永久免费H5直播点播播放器SkeyeWebPlayer.js
- SQL server常见问题
- 【软件收集】四款免费录播录屏演示有关的软件
- 【云原生之Docker实战】使用Docker部署Snipe-It固定资产管理平台
- MySQL 不等于的三种表示及区别
- 0.91英寸OLED初始化程序
- java8中新判空方法之Optional类的使用
- 小游戏制作QQ宠物系列1 ---- 吹泡泡
- 操作系统笔记(3)——同步与互斥
- Qt基于QGraphicsView 实现四个教具之一直尺(一)
- Kotlin学习教程(一)
- RDO远程桌面管理工具
热门文章
- 90-30-020-源码-任务调度-Kylin任务调度
- kerberos安装配置与使用
- 【Antlr】识别常见的词法结构
- 【Kafka】【未解决】kafka反序列化数据报错jackson2 JsonParseException: Invalid UTF-8 middle byte 0xc0
- SpringBoot的Bean之@ConditionalOnBean与@ConditionalOnClass
- 【CDH】ClouderaManager集群报警,堆转储目录/tmp 或日志目录/var/log 可用空间小于 5.0 吉字节
- 21-win10下ElasticSearch.6.1.0安装SQL插件
- 配置监控中心-及管理平台
- 为什么强烈不推荐使用stop、suspend方法来中断线程?
- Net-DataGridView