《架构师修炼之道》阅读笔记02
《架构师修炼之道》是一本深度剖析软件架构设计理论与实践的经典之作,它系统地阐述了架构师所需的专业技能、思维模式以及在实际项目中如何运用。以下是我对本书主要观点的理解和读后感悟:
-
架构师的角色与定位:书中强调架构师并不仅仅是一个技术决策者,更是一个优秀的领导者和协调者。他们需要具备全局视野,能够把握系统的整体结构和发展方向,同时还需要深入理解业务需求,将业务逻辑和技术实现完美结合。
-
架构设计的核心原则:书中提出,一个好的架构设计应当兼顾可扩展性、可维护性、灵活性和性能等多方面因素,做到高内聚、低耦合,符合开闭原则。并且,架构设计应以解决实际问题为导向,避免过度设计,追求适度的复杂性。
-
面向未来的架构观:在快速迭代的互联网时代,书中倡导架构师要具有前瞻性的眼光,预见未来可能的变化和挑战,设计出能够适应变化的弹性架构,这样才能确保软件系统在不断演进的过程中保持生命力。
-
技术决策的艺术:书中通过实例分析,展现了架构师如何在众多的技术方案中做出明智选择,这既包括对新技术的敏感度和接纳能力,也包括对成熟稳定技术的合理利用。
-
团队协作与沟通的重要性:作为架构师,不仅要“做正确的事”,还要“把事情做正确”。这意味着良好的团队协作与高效沟通不可或缺,架构师需具备卓越的人际交往能力,能有效地将自己的设计理念和思路传达给团队成员,并引导大家共同构建高质量的软件系统。
-
技术架构模式
常用的技术架构模式有:
- 分层模式:应用通常分为多层(控制层、服务层、领域层、数据层、基础设施层),是最常见的技术架构模式。
- MVC模式:“模型-视图-控制”, 经典的 WebUI 架构,控制处理请求从而更新模型和返回视图,模型更新驱动视图更新,视图请求控制处理。
- 端口适配模式:系统通过各种端口适配器将输入转换为系统能够处理的输入,或者将系统输出转换为外部能够接收的输出。通常也称为接口模式,用于子系统交互或消息适配。
- 插件模式:系统支持加载不同的插件来完善自身功能。微内核是一种插件模式,其自身只包含最核心的模块,其它模块通过插件机制动态加载进来。
- 管道过滤器模式:由一系列过滤器通过管道连接,构成一个处理流水线。linux 管道就是典范。
- SOA:应用分解为多个分布式的服务组件,通过消息总线和标准服务对象格式来通信。
- 微服务模式:应用分解为多个分布式的微服务组件,通过 RPC 或消息队列来通信。
- 事件驱动模式:组件的变化会产生事件,任何组件都可以发布和监听事件。当事件发布时,监听者获得通知并进行处理,从而又会创建事件,推动进一步的监听和处理,往复循环。
- 订阅推送模式:订阅者订阅消息发布者的某类消息。当消息发送后,订阅者将接收消息进行处理。通常用于解耦多个生产者和消费者。
- 共享数据模式:多个应用通过共享数据库来访问数据。通常是有一个中心数据库,只有少量组件有写权限,而其它组件具备读权限。
- AKF立方体:从功能职责、数据、服务实例三个维度来分解架构职责。
- 单体应用模式:构建一个单体应用,包含了所有的模块和功能组件。通常是为了尽快交付一次性使用系统,不考虑长远维护。
不同的技术架构模式具备不同的整体结构特征,对于不同质量属性的支持程度也是不同的,引入的系统复杂度也是不同的。各个架构模式的详细讲解及所能达成的质量属性,可参阅: 《软件架构基础(影印版)》。
实际工程中,通常是可以多种结合使用的。比如采用微服务模式来构建完整应用的整体通信结构并使各子系统分开独立发展、使用分层模式来控制数据在系统中的有序流转、使用 MVC 模式实现前端与后端的交互、采用管道过滤器模式来处理上报数据、采用事件驱动机制来处理系统内的事件产生和关联、级联处理、采用插件模式来增强系统的功能和可定制性、使用订阅-推送模式来实现业务流程之间的通信和处理、使用端口适配模式来处理来自前端和第三方开发者的请求、使用 AKF 立方体来增强系统的服务能力。
建立领域模型的方法
建议结合阅读 《领域驱动设计》。虽然例子有点难懂,但很有启发性。当初第一次读时,就感觉:有一个稳定的持续演进的领域模型,来指导软件设计与开发,就像增加了一层高屋建瓴的视角。
建立领域模型的基本方法就是:识别业务实体,建立概念及概念的关联。比如云主机入侵领域,可以画一张草图。这张草图基本概括了云主机入侵的基本概念及概念的关联。基于这张图,可以推演各种主机入侵行为。
建立概念的基本方法就是给出概念的名词解释。对每个名词进行清晰的定义和阐释,辅以必要的示例。整个系统围绕这几个名词展开,不乱增概念,不一词多义,也不多词一义混用。名词需要用代码仔细对应和实现。
在获得基本概念及关联之后,可以结合实际场景,持续提炼新的概念。书中给出了一个“墙-门-有锁的门”的例子。还给出了一个提炼新概念的方法:提问-检验(无法回答问题)-分离新概念-完善模型-检验(通过)
将架构模型转为代码
- 统一使用架构词汇:比如领域模型的概念,就需要好的类命名来与之对应。好命名的演进过程:空白-凑合-沾边-反映功能-反映角色-反映意图-领域抽象。
- 组织代码突出架构:比如采用组件编排来实现入侵检测流程,那么就有 components 的包结构,将所有检测相关组件都放在这个包下。
- 贯彻元素关系:用代码表达元素关系(模块结构、组件连接器结构、分配结构)。
- 用代码生成模型:用代码来生成模型,逆向实现代码与模型的一致性。可以了解下 PlantUML,通过代码生成UML图。
- 必要时添加代码注释。
探索设计
够用的设计
- 将解决方案看成实验,通过实验的方式去探索更佳的解决方案。
- 简化问题。努力思考问题的本质,提炼出问题的要素和关联,从基本面去着手解决。
- 快速迭代学习。
- 同时考虑问题和解决方案。
设计策略
- 决定做多少前期设计。 1000w 大系统 37% ,1w 小系统 5%
- 风险作为导航。风险: 条件-影响-范围。
- 主动选择架构、根据系统监控被动设计。
- 制订设计计划:结束设计的条件、必要的设计成果、时间节点、重大风险、概念架构设计。
沟通与交谈
- 利益相关方关系图。
- 记录业务目标: 主体-业务目标-背景。
- 换位思考。
总的来说,《架构师修炼之道》不仅为读者提供了丰富的架构设计知识和实践经验,更是对架构师这一角色进行了深刻解读,对于每一位致力于提升自身技术水平和领导力的IT从业者都有着重要的指导意义。读完此书,我深感架构设计并非一蹴而就的事情,而是需要长期积累、持续学习和实践的过程,同时也明白了成为一名优秀架构师所必备的素质和责任。
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· CSnakes vs Python.NET:高效嵌入与灵活互通的跨语言方案对比
· DeepSeek “源神”启动!「GitHub 热点速览」
· 我与微信审核的“相爱相杀”看个人小程序副业
· Plotly.NET 一个为 .NET 打造的强大开源交互式图表库
· 上周热点回顾(2.17-2.23)