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)

(全文完)

Software Architecture软件架构(方法、模式与框架)纵横谈的更多相关文章

  1. Atitit 软件架构方法的进化与演进cs bs soa roa  msa  attilax总结

    Atitit 软件架构方法的进化与演进cs bs soa roa  msa  attilax总结 1.1. 软件体系架构是沿着单机到 CS 架构,再到 BS 的三层架构甚至多层架构逐步发展过来的,关于 ...

  2. NET设计模式 第二部分 行为型模式(15):模版方法模式(Template Method)

    摘要:Template Method模式是比较简单的设计模式之一,但它却是代码复用的一项基本的技术,在类库中尤其重要. 主要内容 1.概述 2.Template Method解说 3..NET中的Te ...

  3. 设计模式之第1章-工厂方法模式(Java实现)

    设计模式之第1章-工厂方法模式(Java实现) “我先来”,“不,老公,我先!”.远远的就听到几个人,哦不,是工厂方法模式和抽象工厂模式俩小夫妻在争吵,尼妹,又不是吃东西,谁先来不都一样(吃货的世界~ ...

  4. 工厂方法模式与IoC/DI

    IoC——Inversion of Control  控制反转 DI——Dependency Injection   依赖注入 1:如何理解IoC/DI        要想理解上面两个概念,就必须搞清 ...

  5. iOS设计模式之工厂方法模式

    工厂方法模式 基本理解 工厂方法模式:定义一个用于创建对象的接口,让子类决定实例化哪一个类.工厂方法使一个类的实例化延迟到其子类. 简单工厂的最大优点就是工厂类中包含了必要的逻辑判断,根据客户端的选择 ...

  6. 工厂方法模式与IoC/DI控制反转和依赖注入

    IoC——Inversion of Control  控制反转 DI——Dependency Injection   依赖注入 要想理解上面两个概念,就必须搞清楚如下的问题: 参与者都有谁? 依赖:谁 ...

  7. [设计模式]<<设计模式之禅>>工厂方法模式

    1 女娲造人的故事 东汉<风俗通>记录了一则神话故事:“开天辟地,未有人民,女娲搏黄土做人”,讲述的内容就是大家非常熟悉的女娲造人的故事.开天辟地之初,大地上并没有生物,只有苍茫大地,纯粹 ...

  8. 从IT的角度思考BIM(二):模式与框架

    我们满怀着美好期许,鼓起勇气敲响了 BIM 世界的大门.忽然人群中有人高呼:BIM 已死,大家都散了吧! 这时人群开始骚动起来.“我早就说这玩意是忽悠人的吧,你们不信还偏要来”,“我花了好多钱准备这次 ...

  9. 24种设计模式--模版方法模式【Template Method Pattern】

    周三,9:00,我刚刚坐到位置,打开电脑准备开始干活.“小三,小三,叫一下其它同事,到会议室,开会”老大跑过来吼,带着淫笑.还不等大家坐稳,老大就开讲了,“告诉大家一个好消息,昨天终于把牛叉模型公司的 ...

随机推荐

  1. DOCKER学习_014:Docker存储补充

    在前面已经学习了Docker的存储,https://www.cnblogs.com/zyxnhr/p/11830238.html,现在对前面的内容的一个补充,具体请参考https://www.cnbl ...

  2. SpringMVC 环境搭建

    SpringMVC 框架环境搭建操作步骤如下: 创建动态 Web 项目 配置 Tomcat 服务器 配置 SpringMVC 前端控制器 <?xml version="1.0" ...

  3. 手机APP远程空气质量监测应用

    http://club.gizwits.com/thread-3876-1-1.html

  4. 发现新大陆 --21lic

    21lic网上发单平台 http://project.21ic.com/p/97250

  5. 实操笔记:为 NSQ 配置监控服务的心路历程

    在 Go 语言实现的实时消息队列中, NSQ 的热度可以排第一. NSQ 这款消息中间件简单易用,其设计目标是为在分布式环境下运行,为去中心化服务提供一个强大的基础架构.它具有分布式.去中心化的拓扑结 ...

  6. WEB安全防护相关响应头(上)

    WEB 安全攻防是个庞大的话题,有各种不同角度的探讨和实践.即使只讨论防护的对象,也有诸多不同的方向,包括但不限于:WEB 服务器.数据库.业务逻辑.敏感数据等等.除了这些我们惯常关注的方面,WEB ...

  7. 树莓派3B+常用操作

    安装Docker 替换成清华源 清华源地址https://mirrors.tuna.tsinghua.edu.cn/help/docker-ce/ echo "deb [arch=armhf ...

  8. OFRecord 数据格式

    OFRecord 数据格式 深度学习应用需要复杂的多阶段数据预处理流水线,数据加载是流水线的第一步,OneFlow 支持多种格式数据的加载,其中 OFRecord 格式是 OneFlow 原生的数据格 ...

  9. CodeGen按钮循环

    CodeGen按钮循环 按钮循环是一个模板文件构造,它允许您迭代CodeGen拥有的按钮信息集合.              在按钮循环中处理的按钮的定义可以来自两个位置之一. 如果基于UI工具箱输入 ...

  10. pytest基础简介及实践举例

    一.pytest简介 pytest 是 python 的第三方单元测试框架,比自带的 unittest 更简洁和高效,同时兼容 unittest 框架.它还有如下优点: 1.简单灵活,容易上手,文档丰 ...