当前位置: 首页 > news >正文

【成为架构师课程系列】一线架构师: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…...

JAVA 基础题

1. 面向对象有哪些特征?答:继承、封装、多态2. JDK与JRE的区别是什么?答:JDK是java开发时所需环境,它包含了Java开发时需要用到的API,JRE是Java的运行时环境,JDK包含了JRE,他们是包含…...

Flutter desktop端多屏幕展示问题处理

目前越来越多的人用Flutter来做桌面程序的开发,很多应用场景在Flutter开发端还不是很成熟,有些场景目前还没有很好的插件来支持,所以落地Flutter桌面版还是要慎重。 下面来说一下近期我遇到的一个问题,之前遇到一个需要双屏展示的…...

每天10个前端小知识 【Day 9】

👩 个人主页:不爱吃糖的程序媛 🙋‍♂️ 作者简介:前端领域新星创作者、CSDN内容合伙人,专注于前端各领域技术,成长的路上共同学习共同进步,一起加油呀! ✨系列专栏:前端…...

Elasticsearch的读写搜索过程

问题 Elasticsearch在读写数据的过程是什么样的?你该如何理解这个问题! Elasticsearch的写数据过程 客户端选择一个节点发送请求,这个时候我们所说的这个节点就是协调节点(coordinating node)协调节点对document进行了路由&am…...

线上服务质量的问题该如何去处理?你有什么思路?

线上服务质量的问题该如何去处理?你有什么思路? 目录:导读 发现线上故障 处理线上故障 修复线上故障 运营线上质量 就是前几天有个同学问了我一个问题:目前业内高可用部署主要采用方案? 看到这个问题&#xff0c…...

IOC 配置,依赖注入的三种方式

xml 配置 顾名思义,就是将bean的信息配置.xml文件里,通过Spring加载文件为我们创建bean。这种方式出现很多早前的SSM项目中,将第三方类库或者一些配置工具类都以这种方式进行配置,主要原因是由于第三方类不支持Spring注解。 优点…...

自动机,即有限状态机

文章目录一、问题来源二、题目描述三、题解中的自动机四、自动机学习五、有限状态机的使用场景一、问题来源 今天做力克题目的时候看到了字符串转换整数的一道算法题,其中又看到了题解中有自动机的概念,所以在这里对自动机做个笔记。题目链接 二、题目描…...

第一部分:简单句——第一章:简单句的核心——二、简单句的核心变化(主语/宾语/表语的变化)

二、简单句的核心变化 简单句的核心变化其实就是 一主一谓(n. v.) 表达一件事情,谓语动词是其中最重要的部分,谓语动词的变化主要有四种:三态加一否(时态、语态、情态、否定),其中…...

VSCode Markdown写作引入符合规范的参考文献

Markdown可以用来写论文,写论文的时候无一例外要用到参考文献,今天来谈谈怎么自动生成参考文献。之前讲了怎么导出的pdf,文章在这里 VSCode vscode-pandoc插件将中文Markdown转换为好看的pdf文档(使用eisvogel模板) …...

电子学会2022年12月青少年软件编程(图形化)等级考试试卷(四级)答案解析

目录 一、单选题(共15题,共30分) 二、判断题(共10题,共20分) 三、编程题(共3题,共50分) 青少年软件编程(图形化)等级考试试卷(四级) 一、单选题(共15题,共30分) 1. 运行下列程序…...

信用渭南网站建设/企业网站seo优化

#include <stdio.h> #define T 10int main() {int i, j, a[T];printf("请输入%d个数字&#xff0c;空格分隔&#xff1a;\n", T - 1);for (i 1; i < T; i) //a[0] 存放交换时的临时数据scanf("%d", &a[i]);for (i 1; i < T; i) …...

做软件怎么赚钱/百度seo关键词点击软件

总结了一下关于使用onmouseover以及onmouseout会出现的bug 首先简单的布局&#xff1a; <div id"box"><div>这是一个内容</div> </div> 简单写了一下样式&#xff0c;效果如下&#xff1a; js代码如下&#xff1a; var oBox document.getEl…...

网站用户 微信商城/湖南网站制作公司

jasypt能够以很简单的方式为Java项目提供加密功能&#xff0c;这种简单的方式体现着它的命令行工具&#xff0c;与Spring&#xff0c;Hibernate&#xff0c; Springsecurity&#xff0c; wicket等第三方框架的集成。 本文参加jasypt官方网站&#xff1a;http://www.jasypt.org/…...

wordpress 国内视频教程/广东seo外包服务

1.如何处理单元测试产生的数据&#xff0c;下列哪些说法是正确的&#xff1f; 【ABC 】多选 A .测试数据入库时加特殊前缀标识。 B .测试数据使用独立的测试库。 C .自动回滚单元测试产生的脏数据。 D .无须区别&#xff0c;统一在业务代码中进行判断和识别。 2.关于并发…...

上海网站推广汉狮/网站子域名查询

常用Action说明&#xff1a; String ADD_SHORTCUT_ACTION 动作&#xff1a;在系统中添加一个快捷方式。. “android.intent.action.ADD_SHORTCUT”String ALL_APPS_ACTION 动作&#xff1a;列举所有可用的应用。 输入&#xff1a;无。 “android.intent.action.ALL_APPS”Strin…...

wordpress户外俱乐部主题/百度提问

首先 – 我的代码有效.它只是运行缓慢,我想知道我是否遗漏了一些能让它变得更有效率的东西.我正在使用python解析PDF(是的,我知道如果可能的话应该避免这种情况).我的问题是我必须做几个相当复杂的正则表达式替换 – 当我说替换时,我的意思是删除.我已经做了那些首先删除最多数…...