概念

“4+1”视图,是指从5个不同视角来描述软件体系结构。
“4+1”分别指:

  1. 逻辑视图
  2. 过程视图
  3. 物理视图
  4. 开发视图
  5. 场景/用例 视图

逻辑架构的描述可以围绕前四个视图进行组织,然后结合用例或场景进行说明,形成第五个视图。

每个视图只关心系统的一个侧面,5个视图结合起来,才能反映系统的全部内容。

关于视图

软件设计可以从不同的概念角度进行描述和记录,这些角度通常被称为视图。

“视图表示软件体系结构的一部分,它显示软件系统的特定属性”

不同的视图涉及与软件相关的不同问题。

总之,软件设计是由设计过程产生的多方面的产物,通常由相对独立的正交视图组成,可以结合建筑视图理解。

逻辑视图

当使用面向对象的设计方法时,逻辑视图对应设计的对象模型,常用描述方法有UML类图、E-R图。

逻辑架构主要支持功能需求,即系统应该为用户提供什么样的服务。
系统被分解成一组关键抽象,以对象或对象类的形式从问题中表述。

类的设计遵循抽象、封装和继承的原则,这种分解不仅是为了进行功能分析,也是为了理清系统各个部分的通用机制和设计元素。

过程视图

过程架构关注设计的并发和同步方面,考虑了一些非功能性需求,比如性能和可用性。
过程视图可以在几个抽象层次上进行描述,每个抽象层次处理不同的关注点:

  • 在最高层次上关注进程,进程分布在由LAN或WAN连接的一组硬件资源上,作为一组独立执行的通信程序逻辑网络。
  • 多个逻辑网络可以同时存在,共享相同的物理资源。

主要任务是通过一组定义良好的任务间通信机制进行通信:基于同步和异步消息的通信服务、远程过程调用、事件广播等。

次要任务是可以通过集合或共享内存进行通信,避免重大任务在同一过程或处理节点上进行配置假设。

物理视图

物理视图描述软件到硬件的映射,主要反映在分布式方面。

物理架构主要考虑系统的非功能性需求,如可用性、可靠性(容错性)、性能(吞吐量)和可扩展性。

常见物理配置:

  • 测试
  • 为不同站点或不同客户部署系统

开发视图

开发视图描述软件在其开发环境中的静态组织。

开发架构的重点:

  • 对软件开发环境中实际软件模块进行组织
  • 将软件打包成小的程序库,或者打包成可以由一个或少量开发人员开发的子系统

系统的开发架构由模块和子系统图表示,表示成“导出”和“导入”关系。只有当软件的所有元素都被识别之后,才能描述完整的开发架构。

在很大程度上,开发架构考虑发展的便利性、软件管理、重用或通用性,以及工具集或编程语言施加的约束。

开发视图是需求分配的基础,便于开发团队分配工作,有助于成本评估和提前计划、监控项目进度、软件重用、可移植性和安全性的推理。通过开发视图,容易得出项目开发人员的分工配置。

实际应用中,开发视图会在逻辑视图的基础上增加大量内容,比如大量接口、辅助类等。

场景/用例 视图

架构的描述决策可以围绕前四个视图进行组织,然后由一些选定的用例或场景(成为第五个视图)进行说明。

其他四个视图中的元素,可以通过一些重要的场景或用例进行更好的展示,比如:

  • 构造更符合用例的实例
  • 描述一些关联脚本,如对象之间或进程之间的交互

总结

并非所有的软件架构都需要完整的“4+1”视图。

无用的视图可以从架构描述中省略,例如:

  • 如果只有一个处理器,则不需要物理视图
  • 如果只有一个进程或程序,则不需要进程视图
  • 对于非常小的系统,有可能逻辑视图和开发视图非常相似,不需要单独描述

场景视图在任何情况下都有用。

架构设计:"4+1"视图的更多相关文章

  1. Android App的架构设计:从VM、MVC、MVP到MVVM

    随着Android应用开发规模的扩大,客户端业务逻辑也越来越复杂,已然不是简单的数据展示了.如同后端开发遇到瓶颈时采用的组件拆分思想,客户端也需要进行架构设计,拆分视图和数据,解除模块之间的耦合,提高 ...

  2. 解构C#游戏框架uFrame兼谈游戏架构设计

    1.概览 uFrame是提供给Unity3D开发者使用的一个框架插件,它本身模仿了MVVM这种架构模式(事实上并不包含Model部分,且多出了Controller部分).因为用于Unity3D,所以它 ...

  3. VICA 架构设计(1)

    本文记录最近完成的一个通用实时通信客户端的架构.   背景 我们公司是做税务相关的软件,有针对大客户 MIS 系统,也有针对中小客户的 SaaS 平台.这些系统虽然都是 B/S 的,但是也需要使用 A ...

  4. iOS开发之浅谈MVVM的架构设计与团队协作

    今天写这篇博客是想达到抛砖引玉的作用,想与大家交流一下思想,相互学习,博文中有不足之处还望大家批评指正.本篇博客的内容沿袭以往博客的风格,也是以干货为主,偶尔扯扯咸蛋(哈哈~不好好工作又开始发表博客啦 ...

  5. MVC实用架构设计(三)——EF-Code First(4):数据查询

    前言 首先对大家表示抱歉,这个系列已经将近一个月没有更新了,相信大家等本篇更新都等得快失望了.实在没办法,由于本人水平有限,写篇博客基本上要大半天的时间,最近实在是抽不出这么长段的空闲时间来写.另外也 ...

  6. [转]Android App整体架构设计的思考

    1. 架构设计的目的 对程序进行架构设计的原因,归根到底是为了提高生产力.通过设计使程序模块化,做到模块内部的高聚合和模块之间的低耦合.这样做的好处是使得程序在开发的过程中,开发人员只需要专注于一点, ...

  7. worktile的架构设计

    Worktile自上线两年多以来,以良好的用户体验和稳定的服务,获得了用户的认可和喜爱.截止笔者写这篇文章的时候,已经有超过10万家团队在使用Worktile.作为团队协作工具,从技术上分析首先要解决 ...

  8. 架构设计:前后端分离之Web前端架构设计

    在前面的文章里我谈到了前后端分离的一些看法,这个看法是从宏观的角度来思考的,没有具体的落地实现,今天我将延续上篇文章的主题,从纯前端的架构设计角度谈谈前后端分离的一种具体实现方案,该方案和我原来设想有 ...

  9. 猿题库 iOS 客户端架构设计

    原文: http://mp.weixin.qq.com/s?__biz=MjM5NTIyNTUyMQ==&mid=444322139&idx=1&sn=c7bef4d439f4 ...

  10. 猿题库 iOS 客户端架构设计-唐巧

    序 猿题库是一个拥有数千万用户的创业公司,从20013年题库项目起步到2015年,团队保持了极高的生产效率,使我们的产品完成了五个大版本和数十个小版本的高速迭代. 在如此快速的开发过程中,如何保证代码 ...

随机推荐

  1. Flask的请求扩展

    from flask import Flask,request app = Flask(__name__) 一.请求前 before_request 用法 @app.before_request de ...

  2. windows自带的netsh的使用

    0x01netsh简介 自Windows XP开始,Windows中就内置网络端口转发的功能.任何传入到本地端口的TCP连接(IPv4或IPv6)都可以被重定向到另一个本地端口,或远程计算机上的端口, ...

  3. Oier们的幸运数字

    题目描述 JerryC对数字痴迷到了一种非正常的境界.每天JerryC都有喜欢的一些数字.第 iii 天JerryC就喜欢Ai−BiA_i-B_iAi​−Bi​中的数字.但是他觉得这样并不是很有趣,于 ...

  4. tinyxml2

    网上下载tinyxml2:tinyxml2.h和tinyxml2.cpp 加载xml XMLDocument doc;   doc.LoadFile("test.xml");   ...

  5. php好在哪?

    PHP即“超文本预处理器”,是一种通用开源脚本语言.PHP是在服务器端执行的脚本语言,与C语言类似,是常用的网站编程语言.PHP独特的语法混合了C.Java.Perl以及 PHP 自创的语法.利于学习 ...

  6. 实用脚本awk

    非常实用的awk 有时候需要去服务器下载几个日志 日志太多,翻滚起来很麻烦,操作又慢又复杂. 可以使用这个下载最新的两个文件 ls -lt | head -3 | awk -F ' ' '{if(NR ...

  7. 函数基础(三) 装饰器\闭包 day 12

    目录 昨日回顾 可变长参数 * ** 函数对象 函数嵌套 名称空间和作用域 今日内容 闭包函数 装饰器 语法糖 装饰器模板 迭代器 昨日回顾 可变长参数 * *形参:接受多余的位置实参 *实参(可迭代 ...

  8. Redis(五)持久化

    一.RDB RDB持久化是把当前进程数据生成快照保存到硬盘的过程,触发RDB持久化过程分为手动触发和自动触发. 1.触发机制 (1)手动触发:save命令和bgsave命令 save命令:阻塞当前Re ...

  9. 实现文字色彩渐变(Mask)

    文字色彩渐变是指的文字本身的颜色,不是背景渐变.要实现此效果可以采用Mask组件,本文先从介绍mask说起 1)Mask介绍 mask组件实现的作用是,mask组件所在游戏物体下的子游戏物体在mask ...

  10. 2018-7-30 python基本数据类型

    python基本数据类型 int      整数 str      字符串. 一般不存放大量的数据 bool   布尔值. 用来判断. True, False list      列表.用来存放大量数 ...