架构设计4+1视图的作用与关系

设计一个大型的软件系统是一个非常复杂的工作。这个软件系统需要能够满足业务需求 ,达成软件的可靠性、可用性、安全性、性能、容量等质量属性要求,要能够在相应的物理环境上执行,这需要硬件、驱动、操作系统、基础平台、开发框架等大量周边服务或组件,还需要开发几十、数百万的代码,才能够实现。

设计这样一个复杂的系统,必然需要一个或数个设计团队协作配合才能够完成。而要让这些设计人员能够良好的沟通交流,必须对系统有一个统一的认识才能够完成;同时,要将设计转化为实现,需要更多产品、开发、测试人员协同工作。

因此,必须有一种方法,能够让设计人员将一个系统进行自顶向下的设计分解,并形成合理的抽象描述。4+1视图就是这样一种复杂系统的架构设计方法。

4+1视图

Use-Case View

中文可以称为用例视图或场景视图。即4+1中的1。从上图可以看到,4+1中的4个视图都是围绕着用例视图为核心的。

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

用例视图之所以是4+1视图的核心,是因为它确定了以下信息,而其它4个视图都是需要围绕着这些信息进行设计:

  • 系统边界:有了边界,才能够确定系统的设计范围;同时,通过边界能够识别出系统需要与用户或其它系统进行交互;
  • 系统用户:明确的用户定义是系统需求分析的先决条件;
  • 功能和场景:通过识别出系统与用户或其它系统的交互,可以分析出系统需要提供哪些功能,以及这些功能存在哪些应用场景;

因此,用例视图并不限于使用UML的用例图进行设计,也可以使用其它方法,比如使用图表进行描述。只要能够清晰的定义出以上几点,就达到了目的。

Logical View

中文称为逻辑视图,是所有这些视图中最不可或缺的视图。在很多系统设计中,如果系统的功能、场景等比较清晰(比如有明确协议定义的系统),可能会对用例视图进行简化,但却不可以没有逻辑视图。

逻辑视图是对系统职责的的逐级划分,下面TensorFlow的逻辑视图示例,这里描述了TensorFlow中各个功能组件,从这个图中,基本可以对TensorFlow有一个大颗粒度的了解。

TensorFlow逻辑架构

除了对系统职责进行划分,逻辑视图通常还要求对各逻辑元素间的关系,也就是接口进行描述。增加逻辑元素的接口进行描述对系统的设计和实现非常重要。因为软件设计最重要的原则就是高内聚、低耦合,一个满足此原则的系统不应该存在不合理的依赖关系,比如下层与上层间的反向依赖,或是循环依赖等。

一般,逻辑架构元素决定了开发组织(根据康威定律,反之亦然)。因此,逻辑元素的边界和接口也是后续多个开发组织之间进行接口控制的关系依据。设计合理的逻辑架构,可以提升团队的沟通效率,进而提升整个系统的交付效率和质量。

Implementation View

中文称为实现视图或开发视图。在开发视图中,主要包括两部分信息:

  • 对逻辑架构元素,描述其代码位置,可以是代码仓位置,或代码目录,或是开源软件的版本信息等
  • 系统的构建,即如何将代码编译成二进制交付件(比如.so/.bin)。这个构建信息需要包括构建依赖、构建工具链、构建环境信息

一个设计良好的开发视图,应该能够满足以下要求:

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

Deployment View

中文称为部署视图,有时也称为物理视图。

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

  • 二进制交付件,与软件环境的部署关系
  • 软件环境与物理环境的部署关系

通过逻辑视图、开发视图加部署视图,我们已经可以知道系统中每一个逻辑架构元素、每一份代码,最终会运行在什么位置上。反向也可以通过运行环境上,找到所有其上运行的逻辑架构元素和代码。

Process View

中文称为过程视图、运行视图或处理视图。

逻辑视图、开发视图和部署视图,描述的都是系统的静态信息,到现在为止我们还缺少对系统动态行为的描述,而运行视图就是用来描述系统中的动态信息的。运行视图最常见的设计工具就是UML的序列图。

运行视图的设计,最常见的是逻辑架构元素之间的交互关系,比如消息交互、服务调用或API调用。如下图所示。

UML序列图

在运行视图中,除了要关注组件间的交互关系,通常还需要考虑并发、抢占、关键资源(比如锁)访问等。

总结

通过4+1视图,我们可以形成一个系统的抽象描述,组织中的所有成员,都要围绕着这个抽象进行设计、实现、验证,并在系统演进中不断完善修正它们。

当然,4+1视图并不能覆盖系统的所有内容,比如系统中使用了哪些关键的技术,或是系统中关键的数据结构和表的设计,在这里都没能体现出来。这需要我们再结合其它的设计技术来完善补充,才能让我们的系统设计更加完整。

  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
游刃有余地控制复杂性设计高效的企业级解决方案   在一开始就要做出正确的架构决策,从而提高产品的质量和可靠性。《Microsoft .NET企业级应用架构设计》由两位企业级系统开发专家执笔,会告诉你如何用各种模式和技术来控制项目的复杂性,让系统更易于编写、维护和升级。   读者会得到实用的架构方面的指导,包括:   ·在早期设计师就考虑到可测试性、可维护性和安全性   ·通过面向服务的接口暴露业务逻辑   ·选择最佳的模式来组织业务逻辑和行为   ·了解并使用模式来分离Ul和表现层逻辑   ·深入探究数据访问层的模式和最佳实践   ·为对象和数据之间的转换提供良好的解决方案   ·降低开发工作量,避免过度设计,建造更强壮的系统 第1章 当代的架构师和架构   1.1 软件架构到底是什么   1.1.1 将架构原则应用至软件中   1.1.2 什么属于架构,什么不属于   1.1.3 架构与决定相关   1.1.4 软件的需求和质量   1.2 架构师到底是什么   1.2.1 架构师的职责   1.2.2 你知道有多少种架构师吗   1.2.3 对架构师的一些常见误解   1.3 软件开发流程概览   1.3.1 软件生命周期   1.3.2 软件开发模型   1.4 小结   1.5 本章的墨菲法则 第2章 UML必要知识   2.1 uML概览   2.1.1 建模语言的出现动机和历史   2.1.2 UML的模式和使用方法   2.2 UML图表   2.2.1 用例图   2.2.2 类图   2.2.3 顺序图   2.3 小结   2.4 本章的墨菲法则 第3章 设计原则和模式   3.1 基本设计原则   3.1.1 警钟因何而鸣   3.1.2 结构化设计   3.1 3分离关注点   3.2 面向对象设计   3.2.1 面向对象基本设计原则   3.2.2 高级原则   3.3 从原则到模式   3.3.1 模式究竟是什么   3.3.2 模式vs.惯用法   3.3.3 依赖注入   3.4 在设计时就考虑需求   3.4.1 可测试性   3.4.2 安全性   3.5 从对象到方面   3.5.1 面向方面编程   3.5.2 AOP实战   3.6 小结   3.7 本章的墨菲法则   第二部分 系统设计 第4章 业务层   4.1 业务逻辑层究竟是什么   4.1.1 业务层剖析   4.1.2 业务逻辑层的位置   4.1.3 业务层和其他层   4.1.4 创建业务层的模式   4.2 事务脚本模式   4.2.1 事务脚本模式概述   4.2.2 模式实战   4.3 表模块模式   4.3.1 表模块模式概述   4.3.2 表模块模式实战   4.4 活动记录模式   4.4.1 活动记录模式概述   4.4.2 活动记录模式实战   4.5 领域模型模式   4.5.1 领域模型模式概述   4.5.2 领域模型模式实战   4.6 小结   4.7 本章的墨菲法则 第5章 服务层   5.1 服务层究竟是什么   5.1.1 服务层的职责   5.1.2 究竟什么是服务   5.1.3 服务层中的服务   5.2 服务层模式实战   5.2.1 服务层模式概览   5.2.2 服务层模式实战   5.3 相关模式   5.3.1 远程门面模式   5.3.2 数据迁移对象模式   5.3.3 适配器模式   5.3.4 数据迁移对象和程序集   5.4 面向服务架构   5.4.1 SOA的原则   5.4.2 SOA不是什么   5.4.3 SOA和服务层   5.5 富Web前端的特例   5.5.1 重构服务层   5.5.2 设计AJAX服务层   5.5.3 实现AJAX服务层的安全性   5.6 小结   5.7 本章的墨菲法则 第6章 数据访问层   6.1 数据访问层究竟是什么   6.1.1 数据访问层的功能需求   6.1.2 数据访问层的职责   6.1.3 数据访问层和其他层   6.2 设计你自己的数据访问层   6.2.1 数据访问层的契约   6.2.2 插件模式   6.2.3 控制反转模式   6.2.4 为数据上下文打下基础   6.3 雕琢你自己的数据访问层   6.3.1 实现持久化层   6.3.2 实现查询服务   6.3.3 实现事务性语义   6.3.4 实现唯一性和标识映射   6.3.5 实现并发   6.3.6 实现延迟加载   6.4 使用O/RM工具增强数据访问层   6.4.1 对象/关系映射器   6.4.2 使用O/RM工具创建数据访问层   6.5 是否应该使用存储过程   6.5.1 有关存储过程的传言   6.5
游刃有余地控制复杂性设计高效的企业级解决方案   在一开始就要做出正确的架构决策,从而提高产品的质量和可靠性。《Microsoft .NET企业级应用架构设计》由两位企业级系统开发专家执笔,会告诉你如何用各种模式和技术来控制项目的复杂性,让系统更易于编写、维护和升级。   读者会得到实用的架构方面的指导,包括:   ·在早期设计师就考虑到可测试性、可维护性和安全性   ·通过面向服务的接口暴露业务逻辑   ·选择最佳的模式来组织业务逻辑和行为   ·了解并使用模式来分离Ul和表现层逻辑   ·深入探究数据访问层的模式和最佳实践   ·为对象和数据之间的转换提供良好的解决方案   ·降低开发工作量,避免过度设计,建造更强壮的系统 第1章 当代的架构师和架构   1.1 软件架构到底是什么   1.1.1 将架构原则应用至软件中   1.1.2 什么属于架构,什么不属于   1.1.3 架构与决定相关   1.1.4 软件的需求和质量   1.2 架构师到底是什么   1.2.1 架构师的职责   1.2.2 你知道有多少种架构师吗   1.2.3 对架构师的一些常见误解   1.3 软件开发流程概览   1.3.1 软件生命周期   1.3.2 软件开发模型   1.4 小结   1.5 本章的墨菲法则 第2章 UML必要知识   2.1 uML概览   2.1.1 建模语言的出现动机和历史   2.1.2 UML的模式和使用方法   2.2 UML图表   2.2.1 用例图   2.2.2 类图   2.2.3 顺序图   2.3 小结   2.4 本章的墨菲法则 第3章 设计原则和模式   3.1 基本设计原则   3.1.1 警钟因何而鸣   3.1.2 结构化设计   3.1 3分离关注点   3.2 面向对象设计   3.2.1 面向对象基本设计原则   3.2.2 高级原则   3.3 从原则到模式   3.3.1 模式究竟是什么   3.3.2 模式vs.惯用法   3.3.3 依赖注入   3.4 在设计时就考虑需求   3.4.1 可测试性   3.4.2 安全性   3.5 从对象到方面   3.5.1 面向方面编程   3.5.2 AOP实战   3.6 小结   3.7 本章的墨菲法则   第二部分 系统设计 第4章 业务层   4.1 业务逻辑层究竟是什么   4.1.1 业务层剖析   4.1.2 业务逻辑层的位置   4.1.3 业务层和其他层   4.1.4 创建业务层的模式   4.2 事务脚本模式   4.2.1 事务脚本模式概述   4.2.2 模式实战   4.3 表模块模式   4.3.1 表模块模式概述   4.3.2 表模块模式实战   4.4 活动记录模式   4.4.1 活动记录模式概述   4.4.2 活动记录模式实战   4.5 领域模型模式   4.5.1 领域模型模式概述   4.5.2 领域模型模式实战   4.6 小结   4.7 本章的墨菲法则 第5章 服务层   5.1 服务层究竟是什么   5.1.1 服务层的职责   5.1.2 究竟什么是服务   5.1.3 服务层中的服务   5.2 服务层模式实战   5.2.1 服务层模式概览   5.2.2 服务层模式实战   5.3 相关模式   5.3.1 远程门面模式   5.3.2 数据迁移对象模式   5.3.3 适配器模式   5.3.4 数据迁移对象和程序集   5.4 面向服务架构   5.4.1 SOA的原则   5.4.2 SOA不是什么   5.4.3 SOA和服务层   5.5 富Web前端的特例   5.5.1 重构服务层   5.5.2 设计AJAX服务层   5.5.3 实现AJAX服务层的安全性   5.6 小结   5.7 本章的墨菲法则 第6章 数据访问层   6.1 数据访问层究竟是什么   6.1.1 数据访问层的功能需求   6.1.2 数据访问层的职责   6.1.3 数据访问层和其他层   6.2 设计你自己的数据访问层   6.2.1 数据访问层的契约   6.2.2 插件模式   6.2.3 控制反转模式   6.2.4 为数据上下文打下基础   6.3 雕琢你自己的数据访问层   6.3.1 实现持久化层   6.3.2 实现查询服务   6.3.3 实现事务性语义   6.3.4 实现唯一性和标识映射   6.3.5 实现并发   6.3.6 实现延迟加载   6.4 使用O/RM工具增强数据访问层   6.4.1 对象/关系映射器   6.4.2 使用O/RM工具创建数据访问层   6.5 是否应该使用存储过程   6.5.1 有关存储过程的传言   6.5.2 那么动态SQL呢   6.6 小结   6.7 本章的墨菲法则 第7章 表现层   7.1 用户界面和表现层逻辑   7.1.1 表现层的职责   7.1.2 用户界面的职责   7.1.3 表现层的常见误区   7.2 表现层的演化   7.2.1 模型—视图—控制器模式   7.2.2 模型—视图—展示器模式   7.2.3 PresentationModel模式   7.2.4 选择用户界面模式   7.3 表现层的设计   7.3.1 视图中要显示什么数据   7.3.2 处理用户操作   7.4 表现层的惯用设计   7.4.1 Web表现层中的MVP   7.4.2 Windows平台中的MVP   7.5 小结   7.6 本章的墨菲法则   附录 A Northwind Starter Kit   最后的思考

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值