【成为架构师课程系列】一线架构师:6个经典困惑及其解法

目录
一线架构师:6个经典困惑及其解法
多阶段还是多视图?
内置最佳实践
架构方法论:3个阶段,一个贯穿
Pre-architecture阶段:ADMEMS矩阵方法
Conceptual Architecture阶段:重大需求塑造做概念架构
Refined Architecture阶段:落地的5视图方法
持续关注非功能需求:“目标-场景-决策”表方法
解决方案:如何解决“6大困惑”?

一线架构师:6个经典困惑及其解法
一线架构师经常面对的实践困惑,可以用下面的图来概括。其中,涉及了“4个实际问题的困惑”,以及“两个职业发展的困惑”。

多阶段还是多视图?
架构设计的多视图方法很重要,但是,架构设计方法首先当时多阶段的,其次才是多视图的。

一句话,先做后做--这叫阶段(Phase),齐头并进--这叫视图(View)。
任何好的方法(不局限于软件领域),都必须以时间为轴来组织,因为这样才最利于指导实践。
架构设计只需要多视图方法,看上去很美,其实并不足够。实际上,大量一线架构师早已感觉到多视图方法的“不足够”。例如,想想投标:
- 一方面,投标时,需要提供和讲解《方案建议书》,其中涉及架构的内容。
- 另一方面,团队并行开发是,需要《架构设计文档》提供多方涉众使用。
- 但是,投标时将的“架构”和并行开发时做为基础的“架构”在同一个抽象层次上吗?绝不可能。前者叫“概念架构”,后者叫“细化架构”。
- 如果投标失败,细化架构根本没有必要做了。
- 结论,概念架构设计和细化架构设计,是两个架构阶段,不是两个架构视图。
内置最佳实践
方法不应该是个空框框,应融入最佳实践经验。相信业界很多专家都正朝着这个方向迈进。
ADMEMS方法融入了哪些实践?
- 逻辑架构设计的10条经验
- 质疑驱动的逻辑架构设计的整体思路
- 基于鲁棒图进行初步设计的10条经验
ADMEMS矩阵方法- 约束的4大类型
- ...


架构方法论:3个阶段,一个贯穿
通过3个阶段和一个贯穿,来覆盖“需求进,架构出”的架构设计完整工作内容。

上面的图基本上说明“3个阶段”在整个方法体系中的位置。
具体而言:
-
预备架构(
Pre-architecture)阶段(简称PA阶段)- 最大误区:架构师是技术人员不必懂需求
- 实践要点:摒弃“需求列表”方式,建立二维需求观
- 思维工具:
ADMEMS矩阵等
-
概念架构(
Conceptual Architecture)阶段(简称CA阶段)- 最大误区:概念架构 = 理想架构
- 实践要点:重大需求塑造概念架构
- 思维工具:鲁棒图、目标-场景-决策表等
-
细化架构(
Refined Architecture)阶段(简称RA阶段)- 最大误区:架构 = 模块 + 接口
- 实践要点:贴近实践的5视图法
- 思维工具:包图、包-接口图、灰盒包图、时序图、目标-场景-决策表等
3个阶段之间的先后顺序是有极大实际意义,否则就不能称其为“阶段”了。
- 试想,在PA阶段对需求理解不全面(例如遗漏了需求)、不深入(例如没有发现“高性能”和“可扩展”是两个存在矛盾的质量属性),后续设计怎会合理?
- 试想,CA阶段的概念架构设计成果没有反应系统的特点就“冲”去做RA设计,是不是比如会造成更多的设计返工?
“1个贯穿”,指的是对非功能目标的考虑。
Pre-architecture阶段:ADMEMS矩阵方法
ADMEMS 是“Architectural Design Method has been Extended to Method System(将架构设计方法扩展到方法体系)”的缩写。
ADMEMS并不是单一方法,而是由多个各具特点的方法组成的方法体系。
PA阶段的使命,可以概况为一句话:全面理解需求,从而把握需求特点,进而确定架构设计驱动力。 其中,ADMEMS矩阵居于方法的核心。

Conceptual Architecture阶段:重大需求塑造做概念架构
概念架构 ≠ 理想化架构。
所以,必须考虑包括功能、质量、约束在内的所有方面的需求。
下图是推荐的概念架构设计的步骤。

Refined Architecture阶段:落地的5视图方法
细化架构是相对于概念架构而言的。
细化架构阶段的总体方法为5视图方法。

许多架构师,言架构必谈OO。在他们的思想里面,认为OO方法已经完整覆盖了架构设计的所有方法和技巧。这种看法,是相当片面的。
弱OO方法已涵盖架构设计的全部,那么5视图方法所涉及的逻辑架构、物理架构、开发架构、运行架构、数据架构,都应受到OO方法的指导,然而并不是这样。
上面图中说提到的物理架构、开发架构、运行架构和数据架构者4个架构视图,分别是面对节点、面对文件、面对控制流和面向Table(或文件)的 -- 也就是说,一般认为这4个架构摄图主要的思维并非OO思维。
另一方面,即使是逻辑架构的设计,也未必是以OO方法为指导的。应该将逻辑架构设计总结为 “面向职责” 更贴近本质。
持续关注非功能需求:“目标-场景-决策”表方法
非功能需求不可能是“速决战”,连编码都会影响到性能等非功能属性,更何况概念架构设计和细化架构设计。
ADMEMS方法应对非功能需求的思维工具,目标-场景-决策表可以将架构师的思维可视化出来。
解决方案:如何解决“6大困惑”?
那么,如何运用本书解决之前提到的“6个困惑”呢?

如果,你是一个已经有一定实践经验的架构师,希望更加合理地对系统进行模块切分,请关注“第三部分 Refined Architecture阶段”。你将了解到,划分子系统的4大原则。
- 职责分离原则
- 通用专用分离原则
- 技能分离原则
- 工作量均衡原则

架构,是一种递进的能力。
相关文章:
【成为架构师课程系列】一线架构师:6个经典困惑及其解法
目录 一线架构师:6个经典困惑及其解法 多阶段还是多视图? 内置最佳实践 架构方法论:3个阶段,一个贯穿 Pre-architecture阶段:ADMEMS矩阵方法 Conceptual Architecture阶段:重大需求塑造做概念架构 Refined Architecture…...
光耦合器的定义与概述
光耦合器或光电耦合器是一种电子元件,基本上充当具有不同电压电平的两个独立电路之间的接口。光耦合器是可在输入和输出源之间提供电气隔离的常用元件。它是一个 6 引脚器件,可以有任意数量的光电探测器。 在这里,光源发出的光束作为输入和输…...
谷粒商城--品牌管理详情
目录 1.简单上传测试 2.Aliyun Spring Boot OSS 3.模块mall-third-service 4.前端 5.数据校验 6.JSR303数据校验 7.分组校验功能 8.自定义校验功能 9.完善代码 1.简单上传测试 OSS是对象存储服务,有什么用呢?把图片存储到云服务器上能让所有人…...
stack、queue和priority_queue
目录 一、栈(stack) 1.stack的使用 2.容器适配器 3.stack的模拟实现 二、队列(queue) 1.queue的使用 2.queue的模拟实现 三、双端队列(deque) 1.vector,list的优缺点 2.认识deque 四…...
面试题(二十二)消息队列与搜索引擎
2. 消息队列 2.1 MQ有什么用? 参考答案 消息队列有很多使用场景,比较常见的有3个:解耦、异步、削峰。 解耦:传统的软件开发模式,各个模块之间相互调用,数据共享,每个模块都要时刻关注其他模…...
Spring Security in Action 第三章 SpringSecurity管理用户
本专栏将从基础开始,循序渐进,以实战为线索,逐步深入SpringSecurity相关知识相关知识,打造完整的SpringSecurity学习步骤,提升工程化编码能力和思维能力,写出高质量代码。希望大家都能够从中有所收获&#…...
Java面试——maven篇
✅作者简介:2022年博客新星 第八。热爱国学的Java后端开发者,修心和技术同步精进。 🍎个人主页:Java Fans的博客 🍊个人信条:不迁怒,不贰过。小知识,大智慧。 💞当前专栏…...
基于微信小程序的游戏账号交易小程序
文末联系获取源码 开发语言:Java 框架:ssm JDK版本:JDK1.8 服务器:tomcat7 数据库:mysql 5.7/8.0 数据库工具:Navicat11 开发软件:eclipse/myeclipse/idea Maven包:Maven3.3.9 浏览器…...
Matlab绘制隐函数总结-二维和三维
1.二维隐函数 二维隐函数满足f(x,y)0f(x,y)0f(x,y)0,这里无法得到yf(x)yf(x)yf(x)的形式。不能通过普通函数绘制。 我们要关注的是使用fplot函数和fimplicit函数。 第1种情况:基本隐函数 基本的隐函数形式形如: x2y22x2(x2y2)12x^{2}y^{…...
如何直观地理解傅立叶变换?频域和时域的理解
如何直观地理解傅立叶变换 傅里叶变换连续形式的傅立叶变换如何直观地理解傅立叶变换?一、傅里叶级数1.1傅里叶级数的三角形式1.2 傅里叶级数的复指数形式二、傅里叶变换2.1一维连续傅里叶变换三、频谱和功率谱3.1频谱的获得3.2频谱图的特征3.3频谱图的组成频域(frequency do…...
STC15读取内部ID示例程序
STC15读取内部ID示例程序🎉本案例基于STC15F2K60S2为验证对象。 📑STC15 ID序列介绍 STC15系列STC最新一代STC15系列单片机出厂时都具有全球唯一身份证号码(ID号)。最新STC15系列单片机的程序存储器的最后7个字节单元的值是全球唯一ID号,用…...
Xml格式化与高亮显示
具体请参考:Xml格式化与高亮显示...
【GlobalMapper精品教程】045:空间分析工具(2)——相交
GlobalMapper提供的空间分析(操作)的方法有:交集、并集、单并集、差异、对称差集、相交、重叠、接触、包含、等于、内部、分离等,本文主要讲述相交工具的使用。 文章目录 一、实验数据二、符号化设置三、相交运算四、结果展示五、心灵感悟一、实验数据 加载配套实验数据(…...
4年外包终上岸,我只能说这类公司能不去就不去..
我大学学的是计算机专业,毕业的时候,对于找工作比较迷茫,也不知道当时怎么想的,一头就扎进了一家外包公司,一干就是4年。现在终于跳槽到了互联网公司了,我想说的是,但凡有点机会,千万…...
sklearn降维算法1 - 降维思想与PCA实现
目录1、概述1.1 维度概念2、PCA与SVD2.1 降维实现2.2 重要参数n_components2.2.1 案例:高维数据的可视化2.2.2 最大似然估计自选超参数2.2.3 按信息量占比选超参数1、概述 1.1 维度概念 shape返回的结果,几维几个方括号嵌套 特征矩阵特指二维的 一般来…...
「期末复习」线性代数
第一章 行列式 行列式是一个数,是一个结果三阶行列式的计算:主对角线的乘积全排列与对换逆序数为奇就为奇排列,逆序数为偶就为偶排列对换:定理一:一个排列的任意两个元素对换,排列改变奇偶性(和…...
伏并网低电压穿越技术
国内光伏并网低电压穿越要求 略: 低电压穿越方法 当前,光伏电站实现低电压穿越可通过两种方式,即增加硬件设备或者改变控制策略。本节对基于储能设备、基于无功补偿设备、基于无功电流电压支撑控制策略三种实现LVRT的典型方法进行介绍。 …...
opencv的环境搭建
大家好,我是csdn的博主:lqj_本人 这是我的个人博客主页: lqj_本人的博客_CSDN博客-微信小程序,前端,python领域博主lqj_本人擅长微信小程序,前端,python,等方面的知识https://blog.csdn.net/lbcyllqj?spm1011.2415.3001.5343哔哩哔哩欢迎关注…...
C++智能指针
c11的三个智能指针 unique_ptr独占指针,用的最多 shared_ptr记数指针,其次 weak_ptr,shared_ptr的补充,很少用 引用他们要加上头文件#include unique_ptr独占指针: 1.只能有一个智能指针管理内存 2.当指针超出作用域…...
MongoDB--》MongoDB数据库以及可视化工具的安装与使用—保姆级教程
目录 数据库简介 MongoDB数据库的安装 MongoDB数据库的启动 MongoDB数据库环境变量的配置 MongoDB图形化管理工具 数据库简介 在使用MongoDB数据库之前,我们应该要知道我们使用它的原因: 在数据库当中,有常见的三高需求: Hi…...
【人工智能】神经网络的优化器optimizer(二):Adagrad自适应学习率优化器
一.自适应梯度算法Adagrad概述 Adagrad(Adaptive Gradient Algorithm)是一种自适应学习率的优化算法,由Duchi等人在2011年提出。其核心思想是针对不同参数自动调整学习率,适合处理稀疏数据和不同参数梯度差异较大的场景。Adagrad通…...
模型参数、模型存储精度、参数与显存
模型参数量衡量单位 M:百万(Million) B:十亿(Billion) 1 B 1000 M 1B 1000M 1B1000M 参数存储精度 模型参数是固定的,但是一个参数所表示多少字节不一定,需要看这个参数以什么…...
C++中string流知识详解和示例
一、概览与类体系 C 提供三种基于内存字符串的流,定义在 <sstream> 中: std::istringstream:输入流,从已有字符串中读取并解析。std::ostringstream:输出流,向内部缓冲区写入内容,最终取…...
Redis的发布订阅模式与专业的 MQ(如 Kafka, RabbitMQ)相比,优缺点是什么?适用于哪些场景?
Redis 的发布订阅(Pub/Sub)模式与专业的 MQ(Message Queue)如 Kafka、RabbitMQ 进行比较,核心的权衡点在于:简单与速度 vs. 可靠与功能。 下面我们详细展开对比。 Redis Pub/Sub 的核心特点 它是一个发后…...
在Ubuntu24上采用Wine打开SourceInsight
1. 安装wine sudo apt install wine 2. 安装32位库支持,SourceInsight是32位程序 sudo dpkg --add-architecture i386 sudo apt update sudo apt install wine32:i386 3. 验证安装 wine --version 4. 安装必要的字体和库(解决显示问题) sudo apt install fonts-wqy…...
day36-多路IO复用
一、基本概念 (服务器多客户端模型) 定义:单线程或单进程同时监测若干个文件描述符是否可以执行IO操作的能力 作用:应用程序通常需要处理来自多条事件流中的事件,比如我现在用的电脑,需要同时处理键盘鼠标…...
掌握 HTTP 请求:理解 cURL GET 语法
cURL 是一个强大的命令行工具,用于发送 HTTP 请求和与 Web 服务器交互。在 Web 开发和测试中,cURL 经常用于发送 GET 请求来获取服务器资源。本文将详细介绍 cURL GET 请求的语法和使用方法。 一、cURL 基本概念 cURL 是 "Client URL" 的缩写…...
实战三:开发网页端界面完成黑白视频转为彩色视频
一、需求描述 设计一个简单的视频上色应用,用户可以通过网页界面上传黑白视频,系统会自动将其转换为彩色视频。整个过程对用户来说非常简单直观,不需要了解技术细节。 效果图 二、实现思路 总体思路: 用户通过Gradio界面上…...
如何配置一个sql server使得其它用户可以通过excel odbc获取数据
要让其他用户通过 Excel 使用 ODBC 连接到 SQL Server 获取数据,你需要完成以下配置步骤: ✅ 一、在 SQL Server 端配置(服务器设置) 1. 启用 TCP/IP 协议 打开 “SQL Server 配置管理器”。导航到:SQL Server 网络配…...
Python常用模块:time、os、shutil与flask初探
一、Flask初探 & PyCharm终端配置 目的: 快速搭建小型Web服务器以提供数据。 工具: 第三方Web框架 Flask (需 pip install flask 安装)。 安装 Flask: 建议: 使用 PyCharm 内置的 Terminal (模拟命令行) 进行安装,避免频繁切换。 PyCharm Terminal 配置建议: 打开 Py…...
