clean architect

"architect "

Posted by Hangdong on July 24, 2024

前言

我大概在刚刚开始进行软件架构设计的时候,接触到了clean architect的架构思想和方式。刚开始进行架构设计的时候,还停留在模块,分层之类的基本元素的组合上,所以当时也寻找一些业界比较好的方法论,综合实践看下,clean architect和SOLID是最佳的设计原则。 SOLID 是以下是原则的缩写:

  • S 单一职责原则
  • O 开闭原则
  • L 里氏替换原则
  • I 接口隔离原则
  • D 依赖倒置原则

正文

clean architect

在实践中,我认为践行clean architecture的关键是依赖规则。这条规则规定源代码只能向内依赖,在最里面的部分对外面一点都不知道,也就是内部不依赖外部,而外部依赖内部。这种依赖包含代码名称,或类的函数,变量或任何其他命名软件实体。 同样,在外面圈中使用的数据格式不应被内圈中使用,特别是如果这些数据格式是由外面一圈的框架生成的。我们不希望任何外圆的东西会影响内圈层。

外圈通常是应用层的最上层,比如UI层; 内圈通常是应用层的最底层,比如数据层,data center这种entities

Clean Architecture 和 MVVM

在实践中,有界面的应用因为需要设计view mode,故通常需要结合clean architecture和MVVM进行架构设计。

从整个应用程序的功能层级来看,分为UI层,业务层,数据层部分,其中数据层,业务层可以在项目间复用,UI层根据不同的项目定义,开放修改。 从依赖视角来看,UI层到业务层,业务层到数据层,层层单向依赖。 从数据视角来看,数据从底层传入后,经由数据层,业务层,UI层,层层对数据进行处理加工。

能够重用的代码(即Business Use Cases和Data层)即是整体软件架构平台层中的业务基础部分,这部分代码可以在不同的项目中复用,可以加速应用层的开发工作。

需要考虑的3个方面

  1. 功能性需求:功能模块,层次化,交互
  2. 非功能性需求: 性能, 复用, 质量
  3. 生命周期: 扩展, 重构,集成

表现类型

  • 业务逻辑架构: 业务实现,功能划分,与需求中要求的功能和业务紧密联系
  • 技术实现架构: 功能聚合,层次划分,与详设中的模块紧密联系
  • 静态架构: 层次机构, 功能模块,接口关系
  • 动态架构: 复杂功能, 状态控制, 数据流动, 中断处理,时间管理,资源管理

设计视角

  1. 架构对外:功能, 接口, 环境影响
  2. 对内: 静态结构, 动态行为, 资源配置
  3. 设计限制: 非功能性需求, 资源限制

评估准则

  1. 可行性
  2. 时间,成本
  3. 可扩展性
  4. 平台化 以上这些因素,都可以成为最终采用购买,自研开发还是重用的评估输入

测试

我认为可以通过集成测试来对架构进行闭环验证

  1. 按照架构设计定义的模块或者组件进行集成,集成到更大的软件项,直至到和架构设计完全一致的软件项
  2. 通过接口测试来验证架构设计中定义的接口
  3. 交互测试,对应架构中的动态行为
  4. 功能测试,对应架构设计中的功能模块定义和约束(在功能模块中需要明确该模块实现的功能)

多态

  1. 动态多态
  2. 静态多态:采用模板递归模式(CRTP)
  3. C++中的返回值优化(Return Value Optimization, RVO)和移动语义,避免了右值(即临时对象)复制的过程。

结束

好了,今天暂时更到这,欢迎大家阅读、批评和指正,下回再见。