带你读《2022技术人的百宝黑皮书》——开发规约的意义与细则(2)

简介: 带你读《2022技术人的百宝黑皮书》——开发规约的意义与细则(2)

带你读《2022技术人的百宝黑皮书》——开发规约的意义与细则(1)https://developer.aliyun.com/article/1339989?groupCode=taobaotech


开发规约之术

设计规约

 

image.png传统分层架构

 

 

 

image.png

 

 

传统分层架构通过Controller,Service,Manager,  DAO层来组织业务逻辑,通过贫血模型来传递上下文数据, 所有的业务逻辑不需要考虑怎么组织,统统往Manager和Service中写。如果遇到更加复杂的逻辑,那就加一些设 计模式来处理(本质还是封装Service和Manager)。这种方式属于面向过程开发的事务脚本模式,该方式在一些 比较简单的CRUD场景下比较适用,但当逻辑越来越复杂的时候Manager和Service会越来越膨胀和难以维护。

 

举个例子,我们使用ServiceItemService(服务项相关服务)来处理服务项相关的逻辑,我们需要维护以下层次:

 

  1. 存储逻辑;
  2. 数据转换;
  3. 依赖中间件;
  4. 各种业务逻辑;

 

你会发现一个service承担了太多职责,即要与中间件打交道,又要了解存储细节,还要承担各式各样的业务逻辑。当业务逻辑越来越复杂,未来service和manager会变得越来越难以维护。<阿里巴巴Java开发手册>中使用的架  构,很难解决以上耦合的问题。

 

六边形架构

传统分层的问题核心就在于耦合,而面对复杂的业务系统,我们要做的事情就是解耦。

 

 

 

image.png

 

六边形架构将整体的软件系统一分为二,六边形之外是系统的依赖,六边形之内是系统内部需要实现的业务系统, 六边形外部是我们与外部系统用户的交互,左边是我们的下游,右边是上游依赖。内外部通过适配器来进行交互和解耦。

 

六边形架构落地时与传统的分层模型很类似,但是更加明确了不同分层的职责和边界。


带你读《2022技术人的百宝黑皮书》——开发规约的意义与细则(3)https://developer.aliyun.com/article/1339987?groupCode=taobaotech

相关文章
|
存储 C语言
【C语言进阶】数据的存储----浮点型篇
【C语言进阶】数据的存储----浮点型篇
979 0
|
5月前
|
编译器 Linux C语言
整数提升与寻常算术转换——90%算术bug的隐形根源
C语言算术bug的根源常被误认为“编译器玄学”,实则源于C标准强制规定的**整数提升与寻常算术转换**规则。本文深入剖析其底层逻辑、典型陷阱(如符号扩展、有/无符号混用)及避坑实践,助你根治违背直觉的隐形bug。(239字)
|
5月前
|
存储 人工智能 安全
AI 智能体(AI Agent)的开发费用
AI智能体落地成本差异大,2026年主要分五维:研发人力(占60%-80%,5千至百万级)、模型推理(月付100元起或年投30万私有部署)、数据处理(向量库+标注约数千至5万元)、维护安全(提示优化+内容审核)及定制建议。轻量可零成本试用Coze/GPTs,少儿口语等高要求场景建议预算15-30万元。
|
8月前
|
传感器 数据采集 监控
患者定位手环的原理、功能特性及技术联动逻辑详解
患者定位手环通过UWB/蓝牙等技术实现精准定位,集成生命体征监测、防拆报警、一键SOS等功能,结合VoLTE高清通话,构建“数据采集-传输-分析-响应”闭环,适用于医院重症监护、防走失、越界预警等场景,提升患者安全与管理效率,降低医患纠纷。如果您想进一步了解定位的案例,欢迎关注、评论留言~也可搜索lbs智能定位。
|
9月前
|
机器学习/深度学习 人工智能 算法
乘AIGC浪潮:把握万亿级机遇
AIGC正加速从技术走向产业落地,万亿市场规模催生全链条人才需求。北京、上海政策加码,算力基建完善,2025-2027年成关键窗口期。七大核心岗位——AIGC工程师、大模型训练师、AI工程师等全面爆发,覆盖技术到应用各层级,高薪抢人成常态。工信部认证加持,职业前景广阔,人人皆可入局,抢占AI时代新风口。
834 1
|
存储 算法 C语言
"揭秘C语言中的王者之树——红黑树:一场数据结构与算法的华丽舞蹈,让你的程序效率飙升,直击性能巅峰!"
【8月更文挑战第20天】红黑树是自平衡二叉查找树,通过旋转和重着色保持平衡,确保高效执行插入、删除和查找操作,时间复杂度为O(log n)。本文介绍红黑树的基本属性、存储结构及其C语言实现。红黑树遵循五项基本规则以保持平衡状态。在C语言中,节点包含数据、颜色、父节点和子节点指针。文章提供了一个示例代码框架,用于创建节点、插入节点并执行必要的修复操作以维护红黑树的特性。
619 1
|
安全 测试技术 Go
Go语言在高并发场景下的应用
在当今互联网高速发展的时代,高并发已成为众多应用系统面临的核心问题。本文探讨了Go语言在高并发场景下的优势,并通过具体实例展示了其在实际应用中的效果和性能表现。
|
安全 网络协议
阿里云25端口解封教程完美解决25端口封禁的方法
阿里云出于安全考虑,默认封禁了TCP 25端口出方向的访问流量,所以用户无法使用25号端口邮件服务,云吞铺子分享25端口解封的方法: 阿里云25端口解封申请教程 用户想要使用25端口进行对外连接,可以在安全管控平台中提交25端口解封申请,可以参考官方文档(TCP 25端口解封申请- 阿里云),也可以参考下方云吞铺子的教程: 登录到阿里云管理控制台; 鼠标移动到头像,可以看到下拉菜单,点击“安全管控”如下图: 左侧栏“业务申请”--“25端口解封” 注意:在正式申请前,您需要确认同意并承诺,保证TCP 25端口仅用来连接第三方的SMTP服务器,从第三方的SMTP服务器外发邮件。
28006 1
|
Ubuntu 网络协议
Ubuntu 20.04 通过ifconfig修改静态ip无法联网,重置设置后恢复网络
系统:Ubuntu 20.04 操作: 1、通过ifconfig将电脑设置为静态ip 2、接着发现无法连接网络,且电脑右上角的网络连接图标多了一个问号标识。 3、访问浏览器时会报错`DNS_PROBE_FINISHED_BAD_CONFIG`。
3129 154
Ubuntu 20.04 通过ifconfig修改静态ip无法联网,重置设置后恢复网络
|
存储 Java
Java“(array) <X> Not Initialized” (数组未初始化)错误解决
在Java中,遇到“(array) &lt;X&gt; Not Initialized”(数组未初始化)错误时,表示数组变量已被声明但尚未初始化。解决方法是在使用数组之前,通过指定数组的大小和类型来初始化数组,例如:`int[] arr = new int[5];` 或 `String[] strArr = new String[10];`。
761 2

热门文章

最新文章