代码分层笔记

海量数据大课学习笔记(6)-短链平台项目创建+git代码管理+开发分层规范讲解--小滴课堂 小滴课堂,旨在让编程不在难学,让技术与生活更加有趣。随着互联网+的时代,在线教育技术越来越便捷,小D课堂依托在线教育时间以及空间上的便利,为广大IT从业者提供了更为方便、快捷的学习交流途径、提供大量高质量的IT在线课程。简介开源中国Gitee仓库-介绍和项目纳入版本管理+ignore文件配置置Git介绍基于git协议的代码仓库github全球最大同性交友社区gitee开源中国gitlab开源的git仓库平台,阿里等大厂就是基于这个搭建codeup阿里云上的免费git仓库https。............ 阅读详情

1. 为什么要做代码分层

➢ 使代码更加易读易理解;

➢ 实现责任分离;

➢ 实现组件复用;

➢ 制定统一标准;

➢ 便于代码维护及扩展;

2.传统的代码分层

传统或大多数人理解的代码分层就是controller,service,mapper三层。

controller层:主要是对访问控制进行转发,各类基本参数校验,或者顶层异常处理等。
service层:实现相对具体的业务逻辑服务层。
mapper层:数据访问层,与底层数据库进行数据交互。

	虽然传统的三层分层已经很明了,但是实际开发中很多人依然并没有把他们职责划分开,
很多开发人员将大量的业务代码写到controller层中,service层只起到透传mapper层的作用,
这就造成大量代码无法复用,层级关系混乱,对后续代码的维护和扩展非常头痛。

3. 阿里的代码分层规范

在这里插入图片描述

开放接口层 :可直接封装 Service 方法暴露成 RPC 接口;通过 Web 封装成 http 接口;进行 网关安全控制、流量控制等。

终端显示层 :各个端的模板渲染并执行显示的层。当前主要是 velocity 渲染,JS 渲染, JSP 渲染,移动端展示等。

Web 层 :主要是对访问控制进行转发,各类基本参数校验,或者不复用的业务简单处理等。

Service 层 :相对具体的业务逻辑服务层。

Manager 层 :通用业务处理层,它有如下特征:
	1. 对第三方平台封装的层,预处理返回结果及转化异常信息;
	2. 对Service层通用能力的下沉,如缓存方案、中间件通用处理;
	3. 与DAO层交互,对多个DAO的组合复用。

DAO 层 :数据访问层,与底层 MySQL、Oracle、Hbase 进行数据交互。

4. 实际开发中代码分层

在这里插入图片描述

对于很多简单业务而言,Manager 层 是不存在的,但如果存在上述情况:
需要用到缓存、中间件、调用其他服务、调用其他mapper,最好还是创建 Manager 层,
在其中去处理,有 Manager 层就杜绝Service调用Service的情况,
一方面便于他人调用,一方面可以防止出现循环依赖问题。


4. 分层领域

4.1 在阿里编码规约中的领域模型:


POJO(Plain Ordinary Java Object):简单Java对象,它没有任何限制和特定的约定,是一个普通的Java对象
	(BO/VO/PO/DO等一系列对象的总称,通常不建议使用它命名)。
	
DTO(Data Transfer Object):数据传输对象,它是一个数据传输结构
	,通常用于不同进程间的数据传输,在不同层之间传递数据的对象。
	其含义较为广泛,接口的输入输出都可以视作是DTO,如 XXRequestDTO 和 XXResponseDTO,
	通常每个接口都会定义其对应 XXRequestDTO 和 XXResponseDTO。

PO/DO(persistence object/data object):持久化对象,通常指ORM(对象关系映射)中映射的数据库表对应的实体类。

BO(business object):业务对象,是应用程序中业务逻辑的实现。
	通常是实体,或者是聚合根,包含多个实体或值对象,内部实现业务逻辑。
	像Controller,Service,Mapper等也可被称为业务对象(BO)。

VO(value object):值对象,通常用于业务层之间的数据传递,仅仅包含自身的数据。
	与实体的区别是,没有唯一标识,无生命周期,内部值是不变的。某种程度上与 DTO 作用一致。

VO(View Object): 显示层对象,Web向模板渲染引擎层传输的对象。

QO(Query Object):查询对象,它主要用于定义查询条件和规则,用于接收前端传递的查询条件参数。

ENTITY:实体对象,是一个与业务相关的对象,通常是与应用程序领域模型相关的对象。

Param:表示请求参数,用于接收前端传递的参数

Command:表示命令,用于接收前端传递的命令参数

每一个层基本都自己对应的领域模型,这样就导致了在一次请求中一个对象可能会出现3次甚至4次转换,
当返回的时候同样也会出现3-4次转换,这样有可能一次完整的 请求——返回 会出现很多次对象转换。
如果在开发中这么做,不仅会浪费大量的时间精力,还会出现大量冗余的代码,得不偿失。

4.1 实际开发中的领域模型:

在实际开发中,个人觉得选择 VO(value object)或者 DTO(Data Transfer Object) + ENTITY 是比较折中的选择。
ReqVO:输入参数接受对象
RepVO:输出数据对象
Entity:实体对象
R:统一封装的 RepVO 输出对象

5. 实际开发中,不管是代码的分层还是领域模型的设计其实都不会影响程序功能的实现,因为开发习惯的不同,对于哪种分层结构更好,选择那些领域模型也是见仁见智,但不可否认的是,优秀的分层结构、职责分明的领域模型会让代码的逻辑更加清晰,后续维护扩展更加容易。

薛定谔 | 先导化合物优化与相互作用可视化 当获得针对某个靶点的先导分子后,想要在此基础上进行化学结构修饰。为了提升化学改造的成功率可以采用本教程方法进行结构虚拟改造/优化。每用薛定谔处理一个新任务,第一步必须创建新的project以方便日后管理。选项卡中修改工作路径(可以方便地找到输出文件) 阅读详情

相关推荐

BH1750光强度传感器Stm32f103驱动(已测试ok)

1. 实验:Stm32f103 驱动 bh1750采集光照强度,串口打印采集到的数据。 2. 实验准备器材 开发版:stm32f103c8t6 器件:bh1750 GY-302 开发环境:win10,KILE4 下载程序的软件:FlyMcu.exe 串口调试助手:ComAssistant.exe 3. BH1750 的接线 VCC:5V或3.3V ...

weixin_53329977的博客 8928

CherryTree (分层笔记软件) 中文便携版 树状大纲/代码高亮/富文本笔记​

它不仅支持富文本格式,更内置了代码高亮、表格、图片、链接等强大功能,让您能像构建一个个人维基百科一样,系统地建立结构清晰、内容丰富的知识库。CherryTree 是一款免费、开源的分层笔记软件,它采用独特的树状节点结构来组织和管理您的所有笔记。​ 通过无限层级的树状大纲管理笔记,逻辑清晰,非常适合管理项目、学习笔记等结构化内容。

cs35fee的博客 658

告别Arduino IDE!用VSCode搭建Arduino UNO R3开发环境(含代码补全配置)

本文详细指导如何用VSCode替代Arduino IDE搭建Arduino UNO R3开发环境,包含代码补全配置和高效开发技巧。通过安装必要插件、配置项目结构和优化工作流,可显著提升开发效率,特别适合复杂项目开发。文章还提供了常见问题解决方案和高级功能调优方法。

weixin_30698297的博客 477

嵌入式项目代码架构与分层笔记

解耦是指降低程序模块间的依赖关系,使每个模块独立完成自身功能,模块间仅通过标准化接口交互,不涉及内部实现细节。稳定性:层间隔离,单一模块故障影响范围可控。可维护性:模块职责清晰,问题定位、修改更高效。可移植性:更换芯片时仅需修改 Driver 层、BSP 层,上层代码无需改动。开发效率:模块化复用,减少重复开发,支持团队并行协作。

rechol的博客 1246

生成式引擎优化(GEO):启动GEO优化的5个有效策略

随着生成式AI的普及,传统SEO正被GEO(生成式引擎优化)取代。本文提出GEO五大核心策略:用户意图解析、结构化内容设计、语义关键词优化、对话式内容创作和权威信源建设。研究表明,优化后的内容在AI答案中的引用率提升300%,点击率增长27%。文章还介绍了BERT模型、Schema标记等关键技术工具,并指出未来GEO将向多模态优化、实时数据更新方向发展。企业需避免简单堆砌关键词,应建立长期内容策略,通过结构化、权威性内容在AI时代保持竞争优势。

解锁AI流量新红利!🚀 GEO优化(生成引擎优化)助您掌控AI搜索,让AI成为您的品牌最佳代言人! 2785

给STM32供电,别只接VDD和GND!VBAT、VDDA这些引脚不接会怎样?

本文深入解析STM32电源设计中VBAT与VDDA引脚的关键作用,揭示仅连接VDD和GND可能导致的ADC精度下降、RTC功能异常等问题。通过实测数据对比不同连接方案,提供包括滤波电路设计、PCB布局布线和双电源自动切换在内的实用解决方案,帮助开发者优化系统稳定性与性能。

weixin_30521161的博客 621

项目应用代码分层学习笔记

目录 应用分层 分层异常处理规约 分层领域模型规约 应用分层 Java开发手册(黄山版)推荐分层结构如图所示—— 默认上层 依赖于下层,箭头关系表示可直接依赖,如:开放 API 层可以依赖于 Web 层(Controller 层),也可以 直接依赖于 Service 层,依此类推。 开放 API 层:可直接封装 Service 接口暴露成 RPC 接口;通过 Web 封装成 http 接口;网关控制层等。 RPC RPC(Remote Procedure .

m0_51407692的博客 297

微信小程序启用蓝牙设备特征值变化时的notify功能

注意:这里的serviceUUID、notifyCharacteristicUUID 我会在后面写入数据时做重点说明。isNotifyBLECharacteristic:false, //是否启用蓝牙设备服务特征 notify。二、启用蓝牙设备特征值变化时的notify功能。下一篇 将继续介绍 微信小程序蓝牙设备写入数据。

wsk198726的专栏 1171

【gopher的java学习笔记】代码分层之controller和service

Java中的Controller层和Service层是构建Web应用程序的重要组成部分。Controller层负责接收用户请求并处理,而Service层则负责实现业务逻辑和数据访问。通过将应用程序划分为这两个层次,可以实现代码的模块化和解耦,提高代码的可维护性和可测试性。同时,这种架构也便于团队合作开发,各个层次之间的职责清晰,开发人员可以根据自己的专长进行工作。

ThisIsClark 1613

SST专题(2-4)MMC-SST 输入级的环流分析

本文分析了模块化多电平换流器(iMMC-SST)的输入级等效电路、子模块电容电压波动特性及环流抑制机理。研究表明:1)子模块电容电压波动包含基频和二倍频分量,与传统换流器相比波动幅值更大;2)环流主要由子模块电容电压波动在桥臂电感上激发的偶次谐波电流构成,呈频率越高幅值越小的特性;3)可通过增大桥臂电感或采用调制策略叠加抑制电压分量来有效控制环流。研究结果为MMC系统设计提供了理论依据。

嵌入式老牛的博客 585

实现两端固支梁热力耦合的有限元分析

在本文中,我们将使用Matlab实现两端固支梁的热力耦合有限元分析。我们假设梁的材料是均匀的,梁的截面积为1,长度为1,两端固支,且受到均匀分布的热荷载。接下来,我们需要组装全局刚度矩阵和热传导矩阵。对于两个相邻的元素,它们共享一个节点,因此需要使用连接矩阵将局部矩阵组装成全局矩阵。接下来,我们需要定义元素刚度矩阵和热传导矩阵。然后,我们需要定义载荷向量。然后,我们需要定义边界条件。在这个例子中,梁的两端固支,因此我们需要将两端节点的位移限制为0。最后,我们需要解决线性方程组,得到节点的位移和温度分布。

CyberSparkZ的博客 394

自定义代码生成器实战笔记(模板驱动,一键生成分层代码)

/ 自定义模糊查询方法// MtypeService接口// MtypeServiceImpl实现类@Overridequery.setTypeNameLike("%热门%");本文分享的自定义代码生成器,基于模板驱动 + IO 流替换的核心思想,完美解决了多实体类项目中重复编码的痛点。其核心优势在于轻量级、易扩展、零依赖,无需引入复杂的代码生成框架,仅通过 Java 基础 IO 流即可实现。

2302_79797878的博客 913

OpenClaw人人养虾:接入Synology Chat

Synology Chat 是群晖 NAS(Network Attached Storage,网络附属存储)内置的即时通讯应用。

王国平的博客 778

Java分层开发源代码_Java开发学习笔记之一:JavaEE分层及客户层技术 | 学步园

JavaEE技术的分层用户界面层:终端用户系统(HTML,Applet,Windows窗体等等。)表示逻辑层:JSP,ASP,CGI,用于处理HTML,XML,DHTML,WML。或是用户界面控件,如:windows窗体,java awt,swinjg等。业务层:主要是对数据进行分析和计算,同时控制整个程序的动作。比如,在购物网站中,业务层对定单进行处理。它不需要考虑HTML,也不需要直接用SQL...

weixin_34081203的博客 297

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

品优购项目笔记day03——(angularJS分层,angular控制器继承,代码生成器的使用,模板管理与规格管理)

一.angularJS分层 原因 将controller层service层与前端代码放在一起,重用性太低,并且不方便后期的维护 于是分层 分层详情 1.controller层,调用service层方法并与前端交互 2.service层,调用后端controller层方法 3.分页与不分页的切换,只需改变引入文件即可 二.angular控制器继承 1.将通用代码放在...

JavaCoder_juejue的博客 500

廖雪峰Python教程[完整版]

廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白

有道云笔记4年的用户体验

优点: 1.笔记的分层处理很好; 2.云同步效果很好。比如:同步速度快,文件不易丢失; 3.容量充足,每天签到会奖励内存空间,非会员的我现在已经将近10G的内存了,如果只是存笔记的话完全够用; 缺点: 1.搜索功能经常会崩溃,比如:如果搜索一个带特殊符号(-)的文档标题,会出现搜索不到; 2.代码块只要到第10行就会错位,其实优快云这块的代码块做的很好的; 3.文章目录做的不是很人性化,文章目录...

雨果石神的博客 1487

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

【HarmonyOS开发案例】商务办公类行业官方模板介绍 (Part1:笔记应用模板)

​本模板来自华为生态市场(Huawei Partner Market),本文选取了商务办公类行业的一个官方模板——笔记应用模板,并进行了简要的介绍与分析。各位开发者伙伴们,更多行业模板与组件请进入生态市场查看!

weixin_43997900的博客 746

Markdown使用(有道云笔记)

Markdown使用(有道云笔记) Markdown使用(有道云笔记) 一:字体 二:字体大小 三:换行 空格 四:标题 后面保持空格 从h1到h6 一级标题,二级标题 五:根据标题生成目录 六:分层 七:代码 八:超链接 九.插入图片:代码1(内链式) 十:列表 十一:表格 十二:分隔线 一:字体 加粗 要倾斜的文字左右分别用两个*号...

云水 2万+

Trilium(开源知识库构建利器)开源分层式笔记应用

​,支持无限层级嵌套与节点克隆(同一笔记可存在于多个分支),完美适配复杂知识体系的搭建。​(富文本、Markdown、代码高亮、数学公式、Mermaid流程图)、​。Trilium 是一款由开发者 Zadam 打造的​。​(通过JavaScript自定义功能与自动化流程)​(每次修改自动保存历史快照)、​。​(独立密码保护隐私数据),以及​。​,专注于帮助个人与团队构建​。​(可视化知识关联网络)、​。

DOURT345的博客 752

​​Trilium (分层构建大型知识库) 开源笔记软件 中文绿色版​

其核心功能包括属性关系图谱可视化、JavaScript脚本扩展自动化,以及按笔记粒度加密保障隐私。数据本地存储于SQLite数据库,支持自建同步服务器实现多端访问,并提供网页剪藏、版本历史回溯和AI集成插件(如Ollama本地模型)等高级特性。Trilium 是一款专注于构建大型个人知识库的开源分层笔记应用,采用树状结构无限层级组织内容,支持Markdown实时渲染、代码高亮、LaTeX公式及Mermaid图表。全平台兼容且支持中文界面,适合开发者、研究员及注重数据自主权的用户深度定制知识管理体系。

FEIU234的博客 515

编程之美读书笔记_3.8 求二叉树中节点的最大距离 和 3.10分层遍历二叉树 相关代码

//3.10_tree.cpp by flyinghearts#qq.com//3.8_求二叉树中节点的最大距离 和 3.10_分层遍历二叉树 测试例子#include#include#include#includeusing namespace std;struct Node { Node *left; Node *right; int

flyinghearts的专栏 1686

《代码阅读方法》---笔记(第九章)

第九章:系统构架 1.构架总览 要详细分析建立在某种框架之上的应用程序,行动的最佳路线就是从研究框架自身开始。 在阅读向导生成的代码时,不要期望太高,否则您会感到失望。 多数情况下,参考构架只是为应用程序域指定一种概念性的结构,具体的实现并非必须遵照这种结构。 一个系统可以(在重大的系统中也确定如此)同时展示出多种不同的构架类型。以不同的方式检查同一系统、分析系统的不同部分、或使用不同级别的分解 ,都有可能发现不同的构架类型。 大型的、分布式的系统经常实现为许多互相协作的进程。 识别出重要的构架元素后,

weixin_44012721的博客 409

Spring Boot后端开发结构学习笔记

在开始编写 Spring Boot 后端代码前,系统梳理开发结构是非常重要的一步。清晰的项目结构能让后续开发更有条理,也便于代码维护和功能扩展。以下是我在学习 Spring Boot 后端开发结构时整理的笔记,记录了核心的分层思想和各模块的作用。

labaji_的博客 1777

Trilium 开源笔记v0.95.0 绿色版

Trilium 开源笔记v0.95.0 绿色版

ENEN779的博客 465

cherrytree设置中文&cherrytree下载

CherryTree是一款免费开源的分层笔记软件,采用树形结构清晰整理笔记,支持富文本编辑和代码高亮。提供密码保护功能保障数据安全,适用于Windows和Linux系统。下载地址和设置路径详见文中说明。

2402_85611697的博客 291

数字图像处理学习笔记(十一)——用Python代码实现图像增强之线性变换、对数变换、幂律变换、分段线性变换、灰度级分层、直方图均衡化、平滑滤波器、锐化滤波器

数字图像处理(Digital Image Processing)是通过计算机对图像进行去除噪声、增强、复原、分割、提取特征等处理的方法和技术。本专栏将以学习笔记形式对数字图像处理的重点基础知识进行总结整理,欢迎大家一起学习交流! 专栏链接:数字图像处理学习笔记 在数字图像处理学习笔记(八)中,已对图像增强之线性变换、对数变换、幂律变换、分段线性变换、灰度级分层等做过详细理论论述,本文将对上述理...

闭关修炼——暂退 5773
上一篇: maven 的 settings.xml 配置详解
下一篇: Java中包装类型使用‘==’比较的坑
star_falling
博客等级 码龄11年 287粉丝 21原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值