常用的架构指导原则分析:要想做好架构设计,一定要遵循这几个设计原则!

简介: 本篇文章中主要介绍了在对项目系统进行架构设计,需要遵循的几种架构设计原则。架构设计的原则包括开闭原则,单一职责原则,里氏代换原则,接口隔离原则,依赖反转原则,复用与发布等同原则,共同闭包原则,共同复用原则等等。

架构原则的基本概念

  • 设计原则:

    • 架构设计的指导思想
    • 指导如何将数据和函数组织成类,如何将类连接成组件和程序
  • 架构的主要工作就是将软件拆解为组件,而设计原则就是指导如何拆解,拆解的粒度,组件间依赖的方向,组件的解耦方式等
  • 架构设计的主要原则:

    • 开闭原则OCP
  • 类和代码层级上的原则:

    • 单一职责原则SRP
    • 里氏替换原则LSP
    • 接口隔离原则ISP
    • 依赖反转原则DIP
  • 组件层级上的原则:

    • 复用,发布等同原则REP
    • 共同闭包原则CCP
    • 共同复用原则CRP
  • 处理组件依赖问题三原则:

    • 无依赖原则
    • 稳定依赖原则
    • 稳定抽象原则

开闭原则-OCP

  • 设计良好的软件应该对扩展开放,对修改关闭
  • 这是进行架构设计的主导原则,其余原则都为这条原则服务

单一职责原则-SRP

  • 任何一个软件模块,都应该只有一个被修改的原因
  • 也就是说,任何模块只对一个用户价值负责,可以用这个原则来拆分组件

里氏替换原则-LSP

  • 当用同一接口的不同实现互相替换时,系统的行为应该保持不变
  • 里氏替换原则指导的是接口和实现方式

接口隔离原则-ISP

  • 不依赖任何不需要的方法,类或者组件
  • 接口隔离原则指导的是接口设计

    • 当我们依赖一个接口但是只用到了其中的部分方法时,其实已经依赖了不需要的方法或类
    • 当这些方法或类有变更时,会引起类的重新编译,或者引起组件的重新部署,这些都是不必要的
    • 最好定义一个小接口,将用到的方法拆分出来

依赖反转原则-DIP

  • 一种特定的解耦形式:

    • 传统的依赖关系创建在高层次上
    • 具体的策略设置则应用在低层次上
  • 使得高层次的模块不依赖于低层次的模块的实现细节,依赖关系被反转
  • 从而使得低层次模块依赖于高层次模块的需求抽象
  • 跨越组件边界的依赖方向永远与控制流的方向相反.该原则指导设计组件间的依赖方向
  • 依赖反转是一个操作性非常强的原则:

    • 当需要修改组件间的依赖方向时,将需要进行组件间通信的类抽象为接口
    • 接口放在边界的哪边,依赖就指向哪边

复用与发布等同原则-REP

  • 软件复用的最小粒度应等同于发布的最小粒度
  • 也就是说,要复用一段代码就应该抽象成组件
  • 该原则指导组件拆分的粒度

共同闭包原则-CCP

  • 为了相同目的而同时修改的类,应该放在同一个组件中

    • 对于大部分应用而言,可维护的重要性远远大于可复用性
    • 由于同一个原因引起的代码修改,最好在同一个组件中
    • 如果分散在多个组件中,那么开发,提交,部署的成本都会上升
  • CCP原则是SRP原则在组件层面的描述
  • 该原则指导组件拆分的粒度

共同复用原则-CRP

  • 不要强迫一个组件依赖组件本身不需要的依赖
  • CRP原则是ISP原则在组件层面的描述,该原则指导组件拆分的粒度

架构指导原则

  • 除了上述设计原则以外,还有一些重要的指导原则:

在这里插入图片描述

N+1设计

  • 系统中的每个组件都应该做到没有单点故障

回滚设计

  • 确保系统可以向前兼容,在系统升级时应该能有办法回滚版本

监控设计

  • 在设计阶段就要考虑监控的手段,便于有效的排查问题
  • 比如引入traceId,业务身份ID便于监控问题

多活数据中心设计

  • 如果系统需要极高的高可用,应该考虑在多地实施数据中心进行多活,至少在一个机房断电的情况下系统依然可用

采用成熟的技术

  • 刚开发或者开源的技术往往存在很多隐藏的bug
  • 应该采用有更好的技术支持的技术

资源隔离原则

  • 应避免单一业务占用全部资源

架构水平扩展

  • 系统只有做到能水平扩展,才能有效避免瓶颈问题

非核心则购买原则

  • 非核心功能如果需要占用大量的研发资源才能解决,那么就考虑购买成熟的产品

快速迭代

  • 系统应该快速开发小功能模块,尽快上线验证,早日发现问题来大大降低系统交付的风险

无状态设计

  • 服务接口应该做成无状态的
  • 当前接口的访问不依赖于接口上次访问的状态
相关文章
|
人工智能 API 数据安全/隐私保护
Apifox 与 Apipost 的 API 文档引擎对比:底层架构、性能与可扩展性分析
深入探索市场上两大主流API工具——Apifox和Apipost的文档能力时,发现了令人惊讶的差距。这不仅仅是功能多寡的问题,更关乎开发效率与团队协作的质变。
|
人工智能 自然语言处理 数据可视化
两大 智能体框架 Dify vs Langchain 的全面分析,该怎么选?资深架构师 做一个彻底的解密
两大 智能体框架 Dify vs Langchain 的全面分析,该怎么选?资深架构师 做一个彻底的解密
两大 智能体框架 Dify vs Langchain 的全面分析,该怎么选?资深架构师 做一个彻底的解密
|
12月前
|
Java API 开发工具
灵码产品演示:软件工程架构分析
本演示展示灵码对复杂软件项目的架构分析与文档生成能力。通过Qwen3模型,结合PlantUML,自动生成系统架构图、微服务时序图,并提取API接口文档,实现高效、智能的代码理解与文档输出。
650 5
|
12月前
|
存储 JSON 数据处理
ClkLog埋点与用户行为分析系统:架构升级与性能全面提升
随着越来越多企业在实际业务中使用 ClkLog,数据规模和分析需求也不断提升,部分用户日活已经超过10万,为了顺应这一趋势,ClkLog 秉持 “开放透明、持续演进”的理念,推出了迄今为止最重要的一次性能优化升级。新版本在大规模数据处理与复杂查询场景中,性能表现实现了跨越式提升。经过多轮研发与严格测试,新版本现已正式上线:在原有付费版 1.0 的基础上架构全面升级,并同步发布全新的 2.0 版本。为用户带来更强的性能与更广的适用场景。
|
机器学习/深度学习 人工智能 算法
大型多模态推理模型技术演进综述:从模块化架构到原生推理能力的综合分析
该研究系统梳理了大型多模态推理模型(LMRMs)的技术发展,从早期模块化架构到统一的语言中心框架,提出原生LMRMs(N-LMRMs)的前沿概念。论文划分三个技术演进阶段及一个前瞻性范式,深入探讨关键挑战与评估基准,为构建复杂动态环境中的稳健AI系统提供理论框架。未来方向聚焦全模态泛化、深度推理与智能体行为,推动跨模态融合与自主交互能力的发展。
1138 13
大型多模态推理模型技术演进综述:从模块化架构到原生推理能力的综合分析
|
存储 前端开发 JavaScript
如何开发设备管理系统中的经验分析报表板块 ?(附架构图+流程图+代码参考)
设备管理系统(EMS)助力企业高效管理设备生命周期,涵盖采购、维护到报废全流程。本文详解经验分析报表模块设计与开发,涵盖动态看板、点检、巡检、维修、保养及库存统计功能,提供代码示例与架构设计建议,提升设备管理效率与决策水平。
|
SQL 运维 BI
湖仓分析|浙江霖梓基于 Doris + Paimon 打造实时/离线一体化湖仓架构
浙江霖梓早期基于 Apache Doris 进行整体架构与表结构的重构,并基于湖仓一体和查询加速展开深度探索与实践,打造了 Doris + Paimon 的实时/离线一体化湖仓架构,实现查询提速 30 倍、资源成本节省 67% 等显著成效。
1111 3
湖仓分析|浙江霖梓基于 Doris + Paimon 打造实时/离线一体化湖仓架构
|
运维 监控 数据可视化
一文详解:工业软件“低代码开发平台”技术架构研究与分析
本文围绕工业软件低代码开发平台的机遇与挑战,提出基于自动化引擎的技术架构,由工具链、引擎库、模型库、组件库、工业数据网关和应用门户组成。文章分析了其在快速开发、传统系统升级中的应用模式及价值,如缩短创新周期、降低试错成本、解决资源缺乏和提升创新可复制性,为我国工业软件产业发展提供参考和支持。
|
负载均衡 Java API
基于 Spring Cloud 的微服务架构分析
Spring Cloud 是一个基于 Spring Boot 的微服务框架,提供全套分布式系统解决方案。它整合了 Netflix、Zookeeper 等成熟技术,通过简化配置和开发流程,支持服务发现(Eureka)、负载均衡(Ribbon)、断路器(Hystrix)、API网关(Zuul)、配置管理(Config)等功能。此外,Spring Cloud 还兼容 Nacos、Consul、Etcd 等注册中心,满足不同场景需求。其核心组件如 Feign 和 Stream,进一步增强了服务调用与消息处理能力,为开发者提供了一站式微服务开发工具包。
1124 0
|
消息中间件 人工智能 数据可视化
文生图架构设计原来如此简单之用户界面架构
节点式界面是文生图工具中一种强大而灵活的设计范式,以 ComfyUI 为代表。这种设计将复杂的图像生成过程分解为可视化的模块化组件,使用户能够精确控制生成流程的每个环节。
754 2