天天看点

软件架构

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

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

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

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

架构模式:顶层模型的设计方法

设计模式:框架类结构的设计方法

架构设计目标:非功能性的约束

软件架构

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

软件架构

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

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

robert c. martin在2012年提出了干净架构(clean architecture),这是六边形架构的一个变体。

软件架构

dci代表data, context, interaction。ames o. coplien和trygve reenskaug在2009年发表了一篇论文《dci架构:面向对象编程的新构想》

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

软件架构

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

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

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

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

model-view-viewmodel设计模式是mvp的进一步改进,使用双向绑定将view与viewmodel的数据传输自动化。

viper模式最初是在2013年由jeff gilbert 和 conrad stoll 提出,随后在《architecting ios apps with viper》文中做了详细的介绍。

由view+interactor+presenter+entity+routing组成,是clean architecture的一种实现模式。

软件架构

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

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

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

这个模式,命名为bricks architecture(砖块架构)。

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

bricks是一个完全模块化的模式,主要有六种模块:builder+router+interactor+context+brick+scenario。

软件架构

bricks architecture既是clean architecture的一种变体,同时也是clean architecture的一种实现模式。

brick对应于entities

context对应于usecases

adapter对应于adapters

bricks architecture既是dci的一种变体,同时也是dci的一种实现模式。

brick对应于data

context对应于context

adapter+interactor对应于interaction

builder可以实现为generator,生成mvp架构的代码,如果使用双向绑定如vue,那么将生成mvvm架构的代码

builder也可以实现为controler,加载手写代码,可以视为mvc架构的代码。

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)

因为相信,所以看见.

继续阅读