Skip to content

系统设计工具

Published: at 12:08 PM

Table of contents

Open Table of contents

架构决策记录

通过架构决策记录(ADRs)是记录架构决策最有效的方法之一。

ADRs 由一个简短的文件文本组成,描述特定的架构决策。ADR 的格式如下:

架构健康函数

架构健康函数(Architecture Health Metrics)是一组用于评估和量化软件架构健康状况的指标或函数。它们旨在提供对软件架构当前状态的洞察,帮助识别潜在的问题区域,以及指导架构的维护和改进决策。

我们可以通过架构健康函数来实现确保实现者遵守项目的编码规范

例如我们可以写一个适应性函数来避免代码中出现组件循环的情况:

public class CycleTest {

    private JDepend jdepend;

    @BeforeEach
    void init() {
      jdepend = new JDepend();

      jdepend.addDirectory("/path/to/project/persistence/classes");
      jdepend.addDirectory("/path/to/project/web/classes");
      jdepend.addDirectory("/path/to/project/thirdpartyjars");
    }

    @Test
    void testAllPackages() {
      Collection packages = jdepend.analyze();
      assertEquals("Cycles exist", false,
      jdepend.containsCycles());
  }
}

架构健康函数和单元测试函数不太一样,它们是用来检查架构的健康状况,而不是检查代码的正确性。他们有这些区别:

特性架构健康函数单元测试函数
目标评估整个软件架构的健康状况验证代码最小单元的正确性与功能性
关注点软件架构的质量,包括代码质量、性能、安全性等具体代码逻辑的正确性
范围整个系统的架构层面单个函数或方法
方法监控关键架构指标,数据分析编写和执行测试用例,检查特定功能
执行频率根据项目需求定期执行,可能不如单元测试频繁开发过程中频繁执行,通常随代码一起更新
输出架构状态的量化报告,包含潜在问题的指示通过或失败的测试结果,直接指出问题所在位置

架构图

架构图是一种图形化工具,用于描述和理解系统的架构。它可以帮助我们更好地理解系统的结构,评估系统的健康状况,并提供一些指导性的建议。架构图通常会标明系统的主要组件以及这些组件之间的关系。例如,它可能会显示出数据流,或者显示出哪些组件依赖于其他组件。

画架构图的步骤:

  1. 搞清楚要画的架构图的类型
  2. 确认架构图中的关键要素(比如产品、技术、服务)
  3. 梳理关键要素之间的关联:包含、支撑、同级并列等
  4. 输出关联关系清晰的架构图

确定架构图类型

架构图的类型有很多种,比如:

我们可以根据场景选择对应的架构类型

架构类型使用场景
业务架构当需要理解和描述组织的业务策略、业务流程、角色和职责时使用。这有助于识别业务需求和业务改进的机会。
应用架构当需要理解和描述系统的功能组件以及这些组件之间的交互时使用。这有助于设计和实现满足特定业务需求的软件应用。
数据架构当需要理解和描述组织的数据资产以及这些数据如何被存储、访问和使用时使用。这有助于确保数据的一致性、安全性和有效性。
技术架构当需要理解和描述系统的硬件、软件和网络环境以及这些环境如何支持应用和数据架构时使用。这有助于选择和配置适当的技术解决方案。

4+1 视图

4+1视图是一种复杂系统的架构设计方法,让设计人员将一个系统进行自顶向下的设计分解

41

用例视图(User-Case View)

用例视图是一种需求分析技术,通常采用UML的用例图进行设计。通过用例视图的设计过程,可以正确的识别系统的用户和其它系统(Actor)、系统边界(Boundary)和用例(Use Case),并对系统的功能场景进行充分的分析,以确定系统提供的功能可以满足用户需求。它确定了以下信息:

usecaseview

逻辑视图(Logical View)

用于描述系统的功能需求,即系统给用户提供哪些服务;以及描述系统软件功能拆解后的组件关系、组件约束和边界,反映系统整体组成与系统如何构建的过程。

下面springcloud微服务的逻辑视图示例,就描述了spring cloud 中各个功能组件。

logicalview

实现视图(Implementation View)

实现视图关注软件开发环境下实际模块的组织,反映系统开发实施过程。

在一个良好的实现视图中,通过一个逻辑架构元素,能够找到它所有代码和所有的二进制交付件。

每一个代码源文件,都能够找到它所属的逻辑架构元素 每一个二进制交付件,都能够找到它集成了哪些逻辑架构元素

implementationview

部署视图(Deployment View)

开发出的软件系统,最终是要运行在物理或软件环境上。物理环境可能是服务器、PC机、移动终端等物理设备;软件环境可以是虚拟机、容器、进程或线程。部署视图就是对这个部署信息进行描述。在UML中通常由部署图表示。

deploymentview

过程视图(Process View)

用于描述系统软件组件之间的通信时序,数据的输入输出。在UML中通常由时序图和流程图表示,如下图所示:

processview

参考