[架构之路-93]:《软件架构设计:程序员向架构师转型必备》-3-软件架构设计中的视图View

news2024/11/17 10:00:09

前言:

同一个软件系统,从不同的视角View,得到不同的视觉和感受。

所有的视角得到的视觉感受综合而成了整个系统的架构。

有些视角是用眼睛看,有些视角是耳朵听,有些视角用探测器探。

不同的人,视角不同!!!

第3章 软件架构设计中的视图

这里有两个核心观点:

(1)架构设计是为了解决复杂的业务问题,没有要解决的复杂问题,就没有必要有架构设计。

(2)架构设计是化繁为简,从不同的层面、不同的侧面、不同的视角观察目标系统。不同的人,关注不同的视图。

软件架构就是满足所有人的需要,给出他们关心的视图,给出他们站在他们的角度看到的目标系统的愿景。

视图的组织方式:树型图

(1)层次性:自上而下,抽象到具体

业务架构视图=》用户架构视图=》功能架构视图=》类图=》....

(2)多角度性:纵向切分,左右分叉

逻辑功能图、物理部署图、消息交互图、状态图

3.1 软件架构为谁设计

软件架构不是写个机器看的,而是写给不同的人看的,向不同的人展现未来目标系统的愿景。

不同人关注的目标系统的角度不同,看到的视图自然就不相同,因此,有必要先弄清楚,有哪些人会关注目标系统:公司管理层、用户、架构师、系统分析员、程序员、程序经理、配置管理员、部署工程师

架构师的职责:就是为不同的人,用不同的视图展现自己对目标软件系统愿景的理解和设计。

3.1.0 为公司的业务战略而设计(容易被忽略)

公司是盈利为目的的,公司的所有活动都是为社会创作价值,为公司赚取利润。

利润有短期利润,有长期利润,长期利润就是战略目标,业务战略。

得到的视图就是:业务架构视图。

3.1.1 为客户的业务目标而设计

软件系统是为客户解决客户的问题,才有解决客户的真正关系的问题,客户才会为此买单。

公司的才能获取利润,战略目标才能得以实现。

客户是为软件系统最先买单的人。

得到的视图是:业务目标和非功能需求、约束条件等

  • 业务目标

  • 上线时间要求

  • 预算要求

  • 业务规则

  • 业务限制

  • 其他约束条件

3.3.2 为使用软件的用户而设计

用户:软件系统的使用者。

得到的视图就是:用户功能需求

3.1.3 为实现软件的开发人员而设计

3.1.4 为管理人员而设计

3.1.5 总结

因此,软件架构师设计的系统,关于上游、中游、下游的所有人员,不同的人员,关注点不同,看到的视图也就不尽相同。架构师需要为不同视角的人设计不同的架构视图

3.2 什么是架构视图

3.2.1 什么是架构视图

3.2.2 一个直观是示例:展示不同的视图的含义

2.3.3 多视图是应对复杂问题的方法论

每个视图,实际上代表了一个复杂系统的某一个方面。

3.3 两大基本的功能视图:逻辑视图与物理视图

物理视图:物理机器

逻辑视图:功能逻辑

3.3.1 逻辑架构 =》 逻辑视图

3.3.2 物理架构 =》 物理视图

  • 组成软件系统的物理元素(计算机、进程、线程、实例对象都是物理物理元素,而不仅仅是物理)

  • 物理元素之间的关系

  • 把逻辑单元部署到物理单元上的策略

3.3.3 “逻辑架构 + 物理架构”到设计实现

3.4 实际应用:开发人员快速成长之路

3.4.1 开发人员应该多尝试架构架构设计

3.4.2 用例视图

3.4.3 逻辑架构设计:第一次迭代

3.4.4 物理架构设计: 第一次迭代

3.4.5 逻辑架构设计:第二次迭代

3.4.6 物理架构设计:第二次迭代

备注:

本文的主要目的是理解架构是有多层次、多阶段、服务于不同角色的各种视图组成。

其中最重要的两个基本视图是:逻辑视图与物理视图,这是程序员最关心的两张视图。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/184399.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【算法】冒泡排序算法原理及实现

1.什么是冒泡排序 冒泡排序(Bubble Sort),它是一种最为基础的交换排序。之所以叫冒泡排序,是因为这一种排序算法的每一个元素可以根据自身的大小,一点点的向着一侧来移动。每一轮都会找到一个最大的数字冒泡到数组数组…

一文探索预训练的奥秘

2022年下半年开始,涌现出一大批大模型的应用,其中比较出圈的当属AI作画与ChatGPT,刷爆了各类社交平台,其让人惊艳的效果,让AI以一个鲜明的姿态**,站到了广大民众面前,让不懂AI的人也能直观地体会…

一刷代码随想录——哈希表

1 理论基础常见的三种哈希结构当我们想使用哈希法来解决问题的时候,我们一般会选择如下三种数据结构。数组set (集合)map(映射)这里数组就没啥可说的了,我们来看一下set。在C中,set 和 map 分别提供以下三种数据结构&a…

Node.js+Vue.js全栈开发王者荣耀手机端官网和管理后台(三) | 前台页面part

文章目录工具样式概念和SASS样式重置网站色彩和字体定义(colors text)通用flex布局样式定义常用边距定义(margin padding)主页框架和顶部菜单首页顶部轮播图片(vue swiper)使用精灵图片(sprite&…

【ThreeJs 初学习】基本API的使用方式

基本API的使用方式 根据官网的文档整理出一份API文档, 地址是:ThreeJs 官网文档,其目的还是为了方便查阅 下列代码源码地址 // 此处表示导入three import * as THREE from three;// 1. 创建一个场景 const scene new THREE.Scene();// 2. 创建一个相机…

文献阅读:Language Models are Unsupervised Multitask Learners

文献阅读:Language Models are Unsupervised Multitask Learners 1. 内容介绍2. 模型介绍3. 实验结果 1. 语言模型2. QA & 常识推断3. 生成任务 4. 总结 & 思考 文献链接:https://cdn.openai.com/better-language-models/language_models_are_u…

python-布隆过滤器

在学习redis过程中提到一个缓存穿透的问题, 书中参考的解决方案之一是使用布隆过滤器, 那么就有必要来了解一下什么是布隆过滤器。在参考了许多博客之后, 写个总结记录一下。 一、布隆过滤器简介 什么是布隆过滤器? 本质上布隆…

橘子学docker01之基本玩法

docker docker镜像集成了最核心需要得环境,所以占空间小,运行快,启动秒级。 docker的几个概念: 注册中心:相当于超级码头,上面放的就是集装箱。 镜像(image):集装箱,好比…

Spring Boot学习之Dubbo+Zookeeper初识

文章目录一 分布式理论基础知识1.1 单一应用架构1.2 垂直应用架构1.3 分布式服务架构1.4 流动计算架构1.5 PRC[Remote Procedure Call]二 Dubbo2.1 Dubbo简介三 Dubbo环境搭建3.1 Zookeeper简介3.2 Zookeeper下载与安装3.3 解决问题3.3.1 错误一的分析和解决3.3.2 错误二的分析…

JavaEE day8 初识HTTP

HTTP协议 HTTP协议,又称超文本传输协议,是一种应用广泛的应用层协议。所谓超文本,其实就是除了文本还能传输其他资源。而HTTP本身是基于传输层的TCP协议实现的。目前HTTP协议3版本已经在完善中。本文采用1.1版本。 它是一种请求--响应的工作…

MyBatis 持久层框架详细解读:Mapper代理开发

文章目录1. 前言2. Mapper 代理开发3. 过程剖析4. 总结1. 前言 前面在 MyBatis 快速入门篇中,我们使用了 MyBatis 原生的开发方式操作数据库,解决了 JDBC 操作数据库时的硬编码和操作繁琐的问题。实际上,在 Java 项目中,我们更常…

MVC和MVVM的区别

一、MVC mvc&#xff1a;是一种代码架构设计模式&#xff0c;前端中的mvc最主要的作用就是将视图和数据模型进行分离 &#xff08;1&#xff09; 为什么需要 MVC 简单理解&#xff1a;也就是为什么需要将视图和数据模型进行分离 <select id"drinkSelect">&…

宕机后,如何避免 Redis 的数据丢失?

前言 如果有人问你&#xff1a;"你会把 Redis 用在什么业务场景下&#xff1f;" 我想你大概率会说&#xff1a;"我会把它当作缓存使用&#xff0c;因为它把后端数据库中的数据存储在内存中&#xff0c;然后直接从内存中读取数据&#xff0c;响应速度会非常快。…

Lua 文件I/O

Lua 文件I/O 参考至菜鸟教程。 Lua I/O 库用于读取和处理文件。分为简单模式&#xff08;和C一样&#xff09;、完全模式。 简单模式&#xff08;simple model&#xff09;拥有一个当前输入文件和一个当前输出文件&#xff0c;并且提供针对这些文件相关的操作。完全模式&#…

C++Primer13.6.2节练习

练习13.49&#xff1a; StrVec类的移动构造函数和移动赋值运算符 //移动构造函数 StrVec::StrVec(StrVec&& s)noexcept :elements(s.elements), first_free(s.first_free), cap(s.cap) {//令移后源对象进入状态-----对其运行析构函数是安全的s.elements s.first_fre…

关于网络编程

Socket套接字Socket API是网络编程最核心的部分。Socket套接字是由系统提供用于网络通信的技术&#xff0c;是基于TCP/IP协议的网络通信的基本操作单元。基于Socket套接字的网络程序开发就是网络编程。Socket API与传输层密切相关&#xff0c;由于传输层有UDP和TCP两种协议类型…

使用Idea中将单个java类打包成jar包

开工第一天&#xff0c;正在暗自爽&#xff0c;领导让帮个忙&#xff0c;给一个工具类打成jar包&#xff0c;供其他项目组使用&#xff0c;这就开始了尝试。 其实网上已经有好多人写过了&#xff0c;只是尝试了几篇&#xff0c;坑得不轻&#xff0c;自己做下笔记&#xff0c;留…

表格控件Aspose.Cells for .NET 授权须知

支持的平台 Aspose.Cells 可作为 .NET、Java、C 和 Python 的四种不同产品使用&#xff0c; .NET Framework.NET Standard 2.0Xamarin.AndroidXamarin.iOSXamarin.MacCOMMonoWindows Azure Aspose.Cells 下载&#xff08;qun&#xff1a;761297826&#xff09;https://www.ev…

python 高阶函数

传入函数 要理解“函数本身也可以作为参数传入”&#xff0c;可以从Python内建的map/reduce函数入手。 我们先看map。map()函数接收两个参数&#xff0c;一个是函数&#xff0c;一个是序列&#xff0c;map将传入的函数依次作用到序列的每个元素&#xff0c;并把结果作为新的l…

Java:基于注解的Spring使用【AOP容器】和事务管理

目录 第十五章 AOP前奏15.1 代理模式15.2 为什么需要代理【程序中】15.3 手动实现动态代理环境搭建15.4 手动实现动态代理关键步骤第十六章 Spring中AOP【重点】16.1 AspectJ框架【AOP框架】16.2 使用AspectJ步骤&#xff08;入门&#xff09;16.3 Spring中AOP概述16.4 Spring中…