Software Architecture软件架构是啥

随着软件行业的发展,软件的规模越来越大,“Software Architecture软件架构”这个名词开始频繁出现。“软件架构”究竟指的是什么?

广义的“软件架构”针对整个软件系统,当然包括“软件系统”的全部内容,同时包括网络、计算机,外部设备等物理节点,以及开发者,维护者和客户等人员。

狭义的“软件架构”指的是软件开发过程中,软件顶层架构的设计。

本文讨论的是狭义的软件架构,主要包括三方面的内容:

  • 架构模式:顶层模型的设计方法
  • 设计模式:框架类结构的设计方法
  • 架构设计目标:非功能性的约束

Software Architecture软件架构凭啥

领域驱动设计(Domain Driven Design)

Eric Evans在《领域驱动设计-软件核心复杂性应对之道》这本书中提出了传统的DDD四层架构模式。

六边形架构(Haxagonal Architecture)

六边形架构是Alistair Cockburn在2005年提出的,解决了传统的分层架构所带来的问题。Vaughn Vernon 在《实现领域驱动设计》一书中,作者将六边形架构应用到领域驱动设计的实现。将传统的分层架构变成了内部和外部,内部实现领域模型,外部实现适配器。

洋葱架构(Onion Architecture)

Jeffrey Palermo在2008年提出了洋葱架构。它是从六边形架构发展而来,将六边形改为圆环,层层依赖。

干净架构(Clean Architecture)

Robert C. Martin在2012年提出了干净架构(Clean Architecture),这是六边形架构的一个变体。

DCI架构

DCI代表Data, Context, Interaction。ames O. Coplien和Trygve Reenskaug在2009年发表了一篇论文《DCI架构:面向对象编程的新构想》

重点是关注数据的不同场景的交互行为, 核心思想是将面向对象系统的数据模型和动态的行为模型区分开来,用不同的对象复用同一段交互行为。

Software Architecture软件架构有啥

架构模式很难被具体化、框架化,因为它们太过抽象,只是若干设计原则,这样的框架即使被设计出来,也难以流行起来。

相对于抽象的架构模式,框架类设计模式还是很流行的。最流行的当然是MVC框架模式。

MVC框架模式

MVC即模型(model)、视图(view)、控制器(controller)设计模式可谓是无人不知不人不晓。它的缺点是比较重,各部分没有解耦。

MVP框架模式

Model-View-Presenter设计模式是在MVC基础上发展而来,将模型与视图完全分离,可以修改视图而不影响模型。

MVVM框架模式

Model-View-ViewModel设计模式是MVP的进一步改进,使用双向绑定将View与ViewModel的数据传输自动化。

VIPER框架模式

VIPER模式最初是在2013年由Jeff Gilbert 和 Conrad Stoll 提出,随后在《Architecting iOS Apps with VIPER》文中做了详细的介绍。

由View+Interactor+Presenter+Entity+Routing组成,是Clean Architecture的一种实现模式。

Software Architecture软件架构干啥

软件架构设计最大的困难与问题在于,架构模式过于抽象,很难有具体的框架支撑,很难重用代码;设计模式可以有具体的框架类支持,不进行架构设计,直接使用框架是可以的,但是很难支撑复杂系统的高层架构。

所以,对于软件架构设计最有意义的事情,就是把抽象和具体连接起来,既是抽象的模式,同时又是具体的可重用框架。

结合具体的项目过程,我设计了一个模式,同时也实现了一个框架。

Bricks Architecture(砖块架构)

这个模式,命名为Bricks Architecture(砖块架构)。

这个框架,命名为Bricks(离别钩),出自《七种武器》:“你用离别钩,只不过为了要相聚”。

Bricks是一个完全模块化的模式,主要有六种模块:Builder+Router+Interactor+Context+bricK+Scenario。

与干净架构(Clean Architecture)的关系

Bricks Architecture既是Clean Architecture的一种变体,同时也是Clean Architecture的一种实现模式。

Brick对应于Entities

Context对应于UseCases

Adapter对应于Adapters

与DCI架构的关系

Bricks Architecture既是DCI的一种变体,同时也是DCI的一种实现模式。

Brick对应于Data

Context对应于Context

Adapter+Interactor对应于Interaction

与MV*架构的关系

Builder可以实现为Generator,生成MVP架构的代码,如果使用双向绑定如VUE,那么将生成MVVM架构的代码

Builder也可以实现为Controler,加载手写代码,可以视为MVC架构的代码。

与VIPER架构的关系

Model是由Builder根据Brick(Entity)生成

View是由Builder根据Context + Scenario生成

Presenter是由Builder据Context + Scenario+ Brick生成

那么Bricks模式,在生成后变成VIPER,在代码生成后,实际代码是基于VIPER模式的。

(Builder+Context+Scenario)+ Interactor +                      bricK + Router

VIEW                                     + Interactor + Presenter + Entity + Router

架构模式的动态选择

代码生成,在成熟平台如Web,可以完全应用,Bricks框架可以构建LowCode低代码平台。生成的代码可以应用MVC,MVP,MVVM模式。

在代码生成不成熟的平台,如手机平台,可以部分应用或不使用,Bricks框架可以应用VIPER,Clean Architecture等复杂的模式。

动态选择架构模式可以避免过度设计。

与软件架构设计目标的符合度

由于Bricks是完全模块化的模式,在可定制化等方面有着天然的优势。

  • 可定制化(CuSTomizable)
  • 可伸缩性(SCAlable)
  • 可维护性(MAIntainable)
  • 可扩展性(Extensible)

在安全性、可靠性方面,虽然整体强度是降价的,但是模块本身能够被复用,被测试,模块的质量是上升的,所以整体还是可靠的。

  • 安全性(Secure)
  • 可靠性(Reliable)

由于在复用性(DCI模式的应用)、可扩展性(模块化)的优势,界面的一致性很高,开发快速,性能虽然有可能受影响,但体验还是优秀的。

  • 市场时机(Time to Market)
  • 客户体验(Customer Experience)

(全文完)

最新文章

  1. 【译】Unity3D Shader 新手教程(3/6) —— 更加真实的积雪
  2. Azure Application Gateway (1) 入门
  3. linux 用grep匹配横线
  4. delphi json(CDS包含了Delta数据包)
  5. 怎么删除hao.qquu8.com绑定
  6. Linux内核源码分析--内核启动之(3)Image内核启动(C语言部分)(Linux-3.0 ARMv7)
  7. 非学习型单层感知机的java实现(日志三)
  8. 学习笔记GAN003:GAN、DCGAN、CGAN、InfoGAN
  9. 将常用的Android adb shell 命令行封装为C#静态函数
  10. Http请求封装基类HttpHelper.cs
  11. JAVA之旅(二)——if,switch,for,while,do while,语句嵌套,流程控制break , continue ,函数,重载的示例总结
  12. #pragma comment(转)
  13. 关于raft算法
  14. CSS_圣杯布局和双飞翼布局
  15. 5、faker.js数据模拟
  16. C# 依赖注入那些事儿
  17. docker使用非root用户启动容器出现“running exec setns process for init caused \"exit status 40\"": unknown”
  18. myEtherWallet在线钱包的使用
  19. feign的callback设定后,项目启动错误
  20. HAL_RTC_MspInit Msp指代什么?

热门文章

  1. 命令stat anaconda-ks.cfg会显示出文件的三种时间状态(已加粗):Access、Modify、Change。这三种时间的区别将在下面的touch命令中详细详解:
  2. python基础之迭代器、生成器、装饰器
  3. C语言函数sscanf()的用法-(转自Walter L)
  4. Jaxb的优点与用法(bean转xml的插件,简化webservice接口的开发工作量)
  5. Mysql索引的创建与删除
  6. macOS Big Sur 11.4 (20F71) 正式版(DMG、ISO、IPSW),百度网盘下载
  7. centos ping命令找不到服务
  8. 自动机器学习(AutoML)
  9. 视觉SLAM的主要功能模块分析
  10. 用 Flutter 和 Firebase 轻松构建 Web 应用