架构整洁之道(架构篇)

2024-06-24 01:08
文章标签 架构 整洁 之道

本文主要是介绍架构整洁之道(架构篇),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

只有顺心意,才能逆天命 --猫腻《择天记》

接上文:架构整洁之道(原则篇)

      • 1.什么是软件架构
        • 什么是软件架构?
        • “软件架构师”的工作内容是什么?
        • 软件架构设计的目标?
      • 2.重复
      • 3.划分边界
        • 4.尖叫的软件架构
      • 5.整洁架构
        • 5.1 业务实体
        • 5.2 用例
        • 5.3 接口适配器
        • 5.4 框架与驱动程序
      • 6.解耦谬论

欢迎关注微信公众号“江湖喵的修炼秘籍”

1.什么是软件架构

什么是软件架构?

软件架构的实质就是规划如何将系统切分成组件,安排好组件之间的排列关系,以及组件组件之间的通信方式。

“软件架构师”的工作内容是什么?

软件架构师应该坚持做一线程序员,应该在自身承接编程任务的同时引导团队向一个能够最大化生产力的系统设计方向前进。如果架构师从代码中解放出来,就不能亲身承受因系统设计而带来的麻烦和痛苦

软件架构设计的目标?

软件架构设计的主要目标是支撑软件系统的全生命周期,设计良好的架构可以让系统便于理解,易于修改,方便维护,并且能够轻松部署。

软件架构的终极目标是最大化程序员的生产力,最小化系统的总运营成本。

以下从不同角度看待软件架构的目标:

**开发:**软件架构的作用是便于开发

**部署:**一个系统的部署成本越高,可用性越低,实现一键式的轻松部署是软件架构设计的一个目标。运用微服务架构时,要合理控制服务数量。

**维护:**系统维护成本主要集中在“探秘”和“风险”两件事情上,“探秘”的目的是确认新增功能或者被修复问题的最佳位置和最佳方式;“风险”的目的是确认再进行修改时,可能衍生出的新问题。软件架构设计的目标是降低这两个成本。

**保持可选项:**一个优秀的软件架构师应该致力于最大化的可选项数量。高层策略应该避免固化具体的实现细节,比如选择何种UI,选择哪种数据库等等,应尽可能长的延迟这种决策,保留更多的选择性。

**设备无关性:**程序应该与设备无关。

2.重复

架构师们经常会钻进一个牛角尖——害怕重复。

当然,重复在软件行业里一般来说都是坏事。我们不喜欢重复的代码,当代码真的出现重复时,我们经常会感到作为一个专业人士,自己是有责任减少或消除这种重复的。

但是重复也存在着很多种情况。其中有些是真正的重复,在这种情况下,每个实例上发生的每项变更都必须同时应用到其所有的副本上。重复的情况中也有一些是假的,或者说这种重复只是表面性的。如果有两段看起来重复的代码,它们走的是不同的演进路径,也就是说它们有着不同的变更速率和变更缘由,那么这两段代码就不是真正的重复。等我们几年后再回过头来看,可能会发现这两段代码是非常不一样的了。

当我们按用例垂直切分系统的时候,这样的问题会经常出现。我们经常遇到一些不同的用例为了上述原因被耦合在了一起。不管是因为它们展现形式类似,还是使用了相似的语法、相似的数据库查询/表结构等,总之,我们一定要小心避免陷入对任何重复都要立即消除的应激反应模式中。一定要确保这些消除动作只针对那些真正意义上的重复。

3.划分边界

一个系统中最消耗人力资源的 是系统中存在的耦合。

我们应该在软件架构中划分边界,将系统分割成组件,一部分是系统的核心业务逻辑组件,一部分是与核心业务逻辑无关但是负责提供必要功能的插件。

业务逻辑是什么

业务逻辑就是程序中那些真正用于赚钱或者省钱的业务逻辑与过程。

业务逻辑应该保持纯净,不要掺杂用户界面或者所使用的数据库相关的东西。在理想情况下,这部分代表业务逻辑的代码应该是整个系统的核心,其他低层概念的实现应该以插件形式接入系统中。业务逻辑应该是系统中最独立、复用性最高的代码。

架构设计的任务就是找到高层策略与底层细节之间的架构边界,同时保证这些边界遵守依赖关系规则。

4.尖叫的软件架构

架构!=框架

架构设计不应该是与框架相关的,架构应该基于用例来设计,而不应该基于框架来设计。

良好的架构设计应该可以让人第一眼看出这是个什么系统(架构应该尖叫的告诉你)。

一个良好的架构设计应该围绕着用例展开,这样的架构设计可以在脱离框架、工具以及使用环境下完整地描述用例。这就好像一个住宅建筑设计的首要目的应该是满足住宅的使用需求,而不是确保一定要用砖来构建这个房子。架构师应该花费很多精力来确保该架构的设计在满足用例的需要下,尽可能地允许用户能自由地选择建筑材料(砖头、石料或者木材)。

而且,良好的架构设计应该尽可能地允许用户推迟和延后决定采用什么框架、数据库、Web服务以及其他与环境相关的工具。框架应该是一个可选项,良好的架构设计应该允许用户在项目后期再决定是否采用Rails、Spring、Hibernate、Tomcat、MySQL这些工具。同时,良好的架构设计还应该让我们很容易改变这些决定。总之,良好的架构设计应该只关注用例,并能够将它们与其他的周边因素隔离。

5.整洁架构

软件层次从低到高分别是:

框架与驱动程序 (数据库、Web、用户界面、设备、外部接口) < 接口适配器 ( 控制器、展示器、网关) < 应用级业务逻辑(用例) <系统级业务逻辑(业务实体)

源码中的依赖关系也必须按照这个方向流动,即低层机制指向高层机制。

5.1 业务实体

业务实体这一层中封装的是整个系统的关键业务逻辑,一个业务实体既可以是一个带有方法的对象,也可以是一组数据结构和函数的集合。

5.2 用例

软件的用例层中通常包含的是特定应用场景下的业务逻辑,这里面封装并实现了整个系统的所有用例。这些用例引导了数据在业务实体之间的流入/流出,并指挥着业务实体利用其中的关键业务逻辑来实现用例的设计目标。

我们既不希望在这一层所发生的的变更影响业务实体,同时也不希望这一层受外部因素(如数据库、UI、常见框架)的影响。用例层应该与它们都保持隔离。

5.3 接口适配器

软件的接口适配器层中通常是一组数据转换器,它们负责将数据从对用例和业务实体而言最方便操作的格式,转化为外部系统(如数据库、Web)最方便操作的格式。例如,这一层应该包含整个MVC框架。展示器、视图、控制器都应该属于接口适配器层。而模型部分则应该由控制器传递给用例,再由用例传回展示器和视图。

同样的,这一层的代码也会负责将数据从对业务实体与用例而言最方便操作的格式,转化为对所采用的持久性框架最方便的格式。从该层再往内的同心圆中,其代码就不应该依赖任何数据库了。

这一层的代码还会负责将来自外部服务的数据转换成系统内用例与业务实体所需的格式。

5.4 框架与驱动程序

最外层的模型层一般是由工具、数据库、Web框架等组成的。在这一层中,我们通常只需要编写一些与内层沟通的黏合性代码。

框架与驱动程序层中包含了所有的实现细节。Web是一个实现细节,数据库也是一个实现细节。我们将这些细节放在最外层,这样就很难影响到其他层了。

6.解耦谬论

谬论:拆分服务最重要的一个好处就是让每个服务之间实现强解耦。

维服务架构中,拆分服务并不意味着这些服务可以彼此独立开发、部署和运维,如果这些服务之间以数据形式或者行为形式相耦合,那么它们的开发、部署和运维也鄙夫彼此协调来进行。如何为了满足一个需求需要多个服务共同修改,则这些服务本质上都是强耦合的,这就是横跨度变更问题。

这篇关于架构整洁之道(架构篇)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1088767

相关文章

MySQL 缓存机制与架构解析(最新推荐)

《MySQL缓存机制与架构解析(最新推荐)》本文详细介绍了MySQL的缓存机制和整体架构,包括一级缓存(InnoDBBufferPool)和二级缓存(QueryCache),文章还探讨了SQL... 目录一、mysql缓存机制概述二、MySQL整体架构三、SQL查询执行全流程四、MySQL 8.0为何移除查

微服务架构之使用RabbitMQ进行异步处理方式

《微服务架构之使用RabbitMQ进行异步处理方式》本文介绍了RabbitMQ的基本概念、异步调用处理逻辑、RabbitMQ的基本使用方法以及在SpringBoot项目中使用RabbitMQ解决高并发... 目录一.什么是RabbitMQ?二.异步调用处理逻辑:三.RabbitMQ的基本使用1.安装2.架构

mybatis的整体架构

mybatis的整体架构分为三层: 1.基础支持层 该层包括:数据源模块、事务管理模块、缓存模块、Binding模块、反射模块、类型转换模块、日志模块、资源加载模块、解析器模块 2.核心处理层 该层包括:配置解析、参数映射、SQL解析、SQL执行、结果集映射、插件 3.接口层 该层包括:SqlSession 基础支持层 该层保护mybatis的基础模块,它们为核心处理层提供了良好的支撑。

百度/小米/滴滴/京东,中台架构比较

小米中台建设实践 01 小米的三大中台建设:业务+数据+技术 业务中台--从业务说起 在中台建设中,需要规范化的服务接口、一致整合化的数据、容器化的技术组件以及弹性的基础设施。并结合业务情况,判定是否真的需要中台。 小米参考了业界优秀的案例包括移动中台、数据中台、业务中台、技术中台等,再结合其业务发展历程及业务现状,整理了中台架构的核心方法论,一是企业如何共享服务,二是如何为业务提供便利。

系统架构设计师: 信息安全技术

简简单单 Online zuozuo: 简简单单 Online zuozuo 简简单单 Online zuozuo 简简单单 Online zuozuo 简简单单 Online zuozuo :本心、输入输出、结果 简简单单 Online zuozuo : 文章目录 系统架构设计师: 信息安全技术前言信息安全的基本要素:信息安全的范围:安全措施的目标:访问控制技术要素:访问控制包括:等保

利用命令模式构建高效的手游后端架构

在现代手游开发中,后端架构的设计对于支持高并发、快速迭代和复杂游戏逻辑至关重要。命令模式作为一种行为设计模式,可以有效地解耦请求的发起者与接收者,提升系统的可维护性和扩展性。本文将深入探讨如何利用命令模式构建一个强大且灵活的手游后端架构。 1. 命令模式的概念与优势 命令模式通过将请求封装为对象,使得请求的发起者和接收者之间的耦合度降低。这种模式的主要优势包括: 解耦请求发起者与处理者

创业者该如何设计公司的股权架构

本文来自七八点联合IT橘子和车库咖啡的一系列关于设计公司股权结构的讲座。 主讲人何德文: 在公司发展的不同阶段,创业者都会面临公司股权架构设计问题: 1.合伙人合伙创业第一天,就会面临股权架构设计问题(合伙人股权设计); 2.公司早期要引入天使资金,会面临股权架构设计问题(天使融资); 3.公司有三五十号人,要激励中层管理与重要技术人员和公司长期走下去,会面临股权架构设计问题(员工股权激

【系统架构设计师】黑板架构详解

黑板架构(Blackboard Architecture)是一种软件架构模式,它模仿了多个专家系统协作解决问题的场景。在这种架构中,“黑板”作为一个中央知识库,存储了问题的当前状态以及所有的解决方案和部分解决方案。黑板架构特别适合于解决那些没有确定算法、需要多个知识源(或称为“专家”)共同作用才能解决的复杂问题。 一、黑板架构的组成 黑板架构主要由以下几个部分组成: 黑板(Blackboa

Python中的属性装饰器:解锁更优雅的编程之道

引言 在Python的世界里,装饰器是一个强大的工具,它允许我们以一种非侵入性的方式修改函数或方法的行为。而当我们谈论“属性装饰器”时,则是在探讨如何使用装饰器来增强类中属性的功能。这不仅让我们的代码更加简洁、易读,同时也提供了强大的功能扩展能力。本文将带你深入了解属性装饰器的核心概念,并通过一系列实例展示其在不同场景下的应用,从基础到进阶,再到实际项目的实战经验分享,帮助你解锁Python编程

Java后端微服务架构下的API限流策略:Guava RateLimiter

Java后端微服务架构下的API限流策略:Guava RateLimiter 大家好,我是微赚淘客返利系统3.0的小编,是个冬天不穿秋裤,天冷也要风度的程序猿! 在微服务架构中,API限流是保护服务不受过度使用和拒绝服务攻击的重要手段。Guava RateLimiter是Google开源的Java库中的一个组件,提供了简单易用的限流功能。 API限流概述 API限流通过控制请求的速率来防止