一周重温架构简洁之道:一文了解软件架构设计的实现细节,细节处理好,系统更长久【玩转架构】

举报
叶一一 发表于 2024/01/30 09:48:05 2024/01/30
【摘要】 背景前段时间我整理了一篇开发设计文档的经验——《磨刀不误砍柴工,分享编写前端技术设计文档的二三经验》,做为对于2023年的收尾。2024年1月,一年之初,正是立Flag的好时机。因为我今年有几本小说作品的计划,所以被分去了一部分写作精力。有限的精力,想要发挥更高的效率,还是需要一些策略,于是我想到了可以借鉴一下总结开发设计文档的经验。每月中的某一周阅读一本技术图书,然后再用一周时间产出技术收...

背景

前段时间我整理了一篇开发设计文档的经验——《磨刀不误砍柴工,分享编写前端技术设计文档的二三经验》,做为对于2023年的收尾。

2024年1月,一年之初,正是立Flag的好时机。因为我今年有几本小说作品的计划,所以被分去了一部分写作精力。有限的精力,想要发挥更高的效率,还是需要一些策略,于是我想到了可以借鉴一下总结开发设计文档的经验。

每月中的某一周阅读一本技术图书,然后再用一周时间产出技术收获。这样读书写作两不误,我便不没有精力有限的顾虑了。

本月的阅读计划是:《架构简洁之道》。距离我上次阅读这本书,已经过去很长时间了,除了标题,内容已经记不太清了。

子曰:“温故而知新。”我十分期待带着点“历尽千帆”的心境去重新阅读这本书而获得的收获。

软件架构设计的实现细节

按层封装

按层封装基本算是最简单的设计方式,就是传统的水平分层架构。

在这种常见的分层架构中,Web代码分为一层,业务逻辑分为一层,持久化是另外一层。

03.png

如图上图所示,所有的分层(包)之间的依赖关系都是指向下的。

  • OrdersController:Web控制器,类似Spring MVC控制器,负责处理Web请求。
  • OrderService:定义订单相关业务逻辑的接口。
  • OrderServiceImpl:Order服务的具体实现。
  • OrdersRepository:定义如何访问订单持久信息的接口。JdbcOrderRepository:持久信息访问接口的实现。

按功能封装

按功能封装即垂直切分,根据相关的功能、业务概念或者聚合根(领域驱动设计原则中的术语)来切分。

在常见的实现中,所有的类型都会放在一个相同的包中,以业务概念来命名。

04.png

如上图所示,类和接口都被放到了同一个Java包中。

按组件封装

按组件封装的目标是将一个粗粒度组件相关的所有类放入一个Java包中。这种方式会将UI与粗粒度组件分离。

05.png

如上图所示,按组件封装的方式将“业务逻辑”与“持久化代码”合并在一起,称为“组件”。

端口和适配器

通过采用“端口和适配器”“六边形架构”“边界、控制器、实体”等,程序员可以创造出一个业务领域代码与具体实现细节(数据库、框架等)隔离的架构。

具体实现细节中的陷阱

陷阱描述:Java 中 public 访问控制修饰符的滥用。

出现原因:程序员习惯性使用 public 关键词。

产生影响:将所有的类都设置为 public 意味着就无法利用编程语言提供的封装手段。

避免方案:前面提到的四种代码组织方式,程序员在具体实现中需要严加注意。

总结

我们来总结一下软件架构设计的具体实现细节:

  • 代码设计和代码结构的具体安排主要有:按层封装、按功能封装、按组件封装、端口和适配器。
  • 如果不考虑具体实现细节,再好的设计也无法长久。必须要将设计映射到对应的代码结构上,考虑如何组织代码树,以及在编译期和运行期采用哪种解耦合的模式。
  • 最好能利用编译器来维护所选的系统架构设计风格,小心防范来自其他地方的耦合模式,例如数据结构。



作者介绍
非职业「传道授业解惑」的开发者叶一一。
《趣学前端》、《CSS畅想》等系列作者。华夏美食、国漫、古风重度爱好者,刑侦、无限流小说初级玩家。
如果看完文章有所收获,欢迎点赞👍 | 收藏️ | 留言📝

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。