一周重温架构简洁之道:一文了解软件架构设计的实现细节,细节处理好,系统更长久【玩转架构】
背景
前段时间我整理了一篇开发设计文档的经验——《磨刀不误砍柴工,分享编写前端技术设计文档的二三经验》,做为对于2023年的收尾。
2024年1月,一年之初,正是立Flag的好时机。因为我今年有几本小说作品的计划,所以被分去了一部分写作精力。有限的精力,想要发挥更高的效率,还是需要一些策略,于是我想到了可以借鉴一下总结开发设计文档的经验。
每月中的某一周阅读一本技术图书,然后再用一周时间产出技术收获。这样读书写作两不误,我便不没有精力有限的顾虑了。
本月的阅读计划是:《架构简洁之道》。距离我上次阅读这本书,已经过去很长时间了,除了标题,内容已经记不太清了。
子曰:“温故而知新。”我十分期待带着点“历尽千帆”的心境去重新阅读这本书而获得的收获。
软件架构设计的实现细节
按层封装
按层封装基本算是最简单的设计方式,就是传统的水平分层架构。
在这种常见的分层架构中,Web代码分为一层,业务逻辑分为一层,持久化是另外一层。
如图上图所示,所有的分层(包)之间的依赖关系都是指向下的。
- OrdersController:Web控制器,类似Spring MVC控制器,负责处理Web请求。
- OrderService:定义订单相关业务逻辑的接口。
- OrderServiceImpl:Order服务的具体实现。
- OrdersRepository:定义如何访问订单持久信息的接口。JdbcOrderRepository:持久信息访问接口的实现。
按功能封装
按功能封装即垂直切分,根据相关的功能、业务概念或者聚合根(领域驱动设计原则中的术语)来切分。
在常见的实现中,所有的类型都会放在一个相同的包中,以业务概念来命名。
如上图所示,类和接口都被放到了同一个Java包中。
按组件封装
按组件封装的目标是将一个粗粒度组件相关的所有类放入一个Java包中。这种方式会将UI与粗粒度组件分离。
如上图所示,按组件封装的方式将“业务逻辑”与“持久化代码”合并在一起,称为“组件”。
端口和适配器
通过采用“端口和适配器”“六边形架构”“边界、控制器、实体”等,程序员可以创造出一个业务领域代码与具体实现细节(数据库、框架等)隔离的架构。
具体实现细节中的陷阱
陷阱描述:Java 中 public 访问控制修饰符的滥用。
出现原因:程序员习惯性使用 public 关键词。
产生影响:将所有的类都设置为 public 意味着就无法利用编程语言提供的封装手段。
避免方案:前面提到的四种代码组织方式,程序员在具体实现中需要严加注意。
总结
我们来总结一下软件架构设计的具体实现细节:
- 代码设计和代码结构的具体安排主要有:按层封装、按功能封装、按组件封装、端口和适配器。
- 如果不考虑具体实现细节,再好的设计也无法长久。必须要将设计映射到对应的代码结构上,考虑如何组织代码树,以及在编译期和运行期采用哪种解耦合的模式。
- 最好能利用编译器来维护所选的系统架构设计风格,小心防范来自其他地方的耦合模式,例如数据结构。
作者介绍
非职业「传道授业解惑」的开发者叶一一。
《趣学前端》、《CSS畅想》等系列作者。华夏美食、国漫、古风重度爱好者,刑侦、无限流小说初级玩家。
如果看完文章有所收获,欢迎点赞👍 | 收藏⭐️ | 留言📝。
- 点赞
- 收藏
- 关注作者
评论(0)