《架构整洁之道》-读书笔记

news/2025/3/14 19:01:11/文章来源:https://www.cnblogs.com/WoodJim/p/18772706

本文同步发布于公众号:移动开发那些事:《架构整洁之道》-读书笔记

《架构整洁之道》是Robert C. Martin(鲍勃大叔)的经典著作,主要围绕如何设计高质量、可维护、可扩展的软件架构展开。其核心观点为
软件架构的本质从来都不是追求完美的技术实现,而是通过合适的设计,在服务于业务需求的同时最大化保持代码的可维护性和可扩展性。

1 架构核心目标

  • 延长系统寿命(可维护):减小技术债务,降低维护成本
  • 适应变化(可扩展):具备持续演化的能力,能够灵活应对需求变化和技术迭代;

2 依赖规则

设计要遵循依赖倒置规则:高层模块不应该依赖于低层模块,而要依赖于抽象。常见的是通过依赖反转和接口隔离,解耦系统层次,增强代码的灵活性和可测试性;

3 分层架构

通过分层模型(同心圆模型),将架构划分为多个层次:核心业务逻辑 ->用例 -> 接口适配器 -> 框架工具,进而保证业务逻辑不会被底层技术框架侵入,增加代码的可移植性;

4 软件设计原则

在设计时,要遵循SOLID原则

  • 单一职责原则:每个模块只有一个变更原因:
  • 开闭原则:系统对扩展开放,对修改封闭;
  • 里氏规则原则:子类能替代父类而不影响正确性;
  • 接口隔离原则:接口应细粒度化,避免不必要的依赖
  • 依赖反转原则:高层和低层模块都应该依赖于抽象

5 组件构建与架构实现

  • 组件设计:组件是软件的最小部署单元,一般遵循无依赖环原则,稳定依赖原则,稳定抽象原则;
  • 架构模式选择:根据业务需求,选择合适的分层架构,事件驱动架构,微服务架构,确保系统结构清晰,易于维护;

6 架构演进

理想的架构应具备一定的灵活性,既能满足当前需求,又能适应未来变化,通过渐进式重构和债务管理,确保系统在生命周期内技术交付价值;

代码整洁之道:程序员的职业素养

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/898808.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【向量模型】 开源通用向量模型BGE (BAAI General Embedding)

BGE(BAAI General Embedding)是北京智源人工智能研究院(BAAI)推出的开源文本向量模型, 专门用于将文本转换为高维向量表示(即 Embedding),其核心目标是提升文本检索、语义匹配等任务的性能。1. BGE 的核心特点 总结 BGE 是专为检索任务优化的开源 Embedding 模型,优…

根据前序遍历和后序遍历计数二叉树

我们知道,对于一个二叉树,如果我们我们知道他的前(或后)序遍历和中序遍历,那就可以直接构造还原出完整的二叉树。中序遍历很重要。 那么给定一个树的前序遍历和后序遍历,能不能构造出这个树呢?一般是不行的,参考往期文章 https://www.cnblogs.com/ofnoname/p/16864200.…

使用Micrometer与prometheus集成监控jvm

1.简介Micrometer 是一个用于收集和报告指标的 Java 库,广泛用于 Spring Boot 和其他 Java 应用。它提供了对系统各项资源的监控支持,包括但不限于 JVM、内存、垃圾回收、线程池、HTTP 请求 等。Micrometer 支持与多种监控系统的集成,例如 Prometheus、InfluxDB、Datadog 等…

3.14 二重积分

1 1.1 概念引入1.2 分、匀、和、均 分割:把XOY平面分割成若干个小区域,相应的,把柱体分割成n个小的曲顶柱体 取近似:取某一小块的一个点,通过函数关系确定此点的高,体积就等于此处的面积*高 作和:把每一小块的体积加起来,作为曲顶柱体的体积 取极限:设λ,λ趋近于0,…

Livox MID-70连接及使用

一、Livox MID-70连接及使用 参考链接 1.ubuntu18.04安装下载 2.Ros下载 3.Livox_viewer下载 去官网下载livox_viewer,Windows和Linux版本都有。livox_viewer不需要SDK和ros_driver即可使用。 Ps:这里我们选择livox viewer1,不要选择版本2,否则可能面临一个硬件和驱动跟不上…

使用C#创建一个MCP客户端

前言 网上使用Python创建一个MCP客户端的教程已经有很多了,而使用C#创建一个MCP客户端的教程还很少。 为什么要创建一个MCP客户端呢? 创建了一个MCP客户端之后,你就可以使用别人写好的一些MCP服务了。 效果展示 为了方便大家复现,我没有使用WPF/Avalonia之类的做界面。只是…

Maven JavaFX使用SCSS样式表

原理 JavaFX本身的CSS解析器不支持SCSS,因此我们需要在编译阶段将SCSS文件编译为CSS文件,然后在JavaFX中引入CSS文件。 本文使用的编译插件是sass-cli-maven-plugin。 使用 POM文件设置 代码如下: <build><plugins><plugin><groupId>us.hebi.sass&l…

linux中如何判断一个rpm是手动安装还是通过yum安装的

现状 对于一个不熟悉的服务器或者是虽然是自己的服务器,但历史比较久远,对于上面安装了的一些软件包,我们记忆都慢慢模糊了。 我今天遇到一个情况,在安装一个工具x2openEuler时,安装失败,提示依赖冲突: [root@VM-0-6-centos x2openeuler]# yum install x2openEuler-core…

如何让你的应用在市场中脱颖而出?

开发者在完成应用开发并成功上架应用市场后,将面临一项重要挑战:如何在竞争激烈的环境中脱颖而出,吸引用户的关注?为此,提升应用的曝光度和下载量至关重要。 HarmonyOS SDK应用市场服务(Store Kit)提供应用市场业务的对外开放能力,针对想要获得曝光的应用,Store Kit提…

阿里通义实验室语音团队负责人鄢志杰离职;苹果计划在 AirPods 上配备实时对话翻译功能丨日报

开发者朋友们大家好:这里是 「RTE 开发者日报」 ,每天和大家一起看新闻、聊八卦。我们的社区编辑团队会整理分享 RTE(Real-Time Engagement) 领域内「有话题的 技术 」、「有亮点的 产品 」、「有思考的 文章 」、「有态度的 观点 」、「有看点的 活动 」,但内容仅代表编辑…

OP90-1工作原理

step1.压紧弹簧及产品 上下气缸压紧弹簧,产品压紧气缸压紧产品step2.弹簧钩下降 拉簧钩紧气缸伸出,带动弹簧钩下降step3.弹簧钩带动弹簧转动,下弹簧脚进槽step4.弹簧钩提起step5.弹簧钩旋转,带动弹簧越过高处,到达卡槽正上方step6.弹簧钩下降step.弹簧钩回退撤出 弹簧钩回…

Java的volatile和sychronized底层实现

1. 概览 从Java代码级别到硬件级别各层都是如何实现的2. Synchronized 2.1 字节码层面 使用javap -verbose <class文件>可以查看到字节码信息,其中synchronized方法会有flags:ACC_SYNCHRONIZED,此时字节码中不会包含monitorenter和moniotrexit,JVM会自动加 public syn…