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

28.结语

文章目录

      • 28 Epilogue 结语

28 Epilogue 结语

Don’t let it end like this. Tell them I said something.
不要让它就这样结束。 告诉他们我说了些什么

—Pancho Villa

您已到达旅程的尽头。 辛苦了

我们希望您能从本书中找到一些有价值的收获。 我们建议该列表应包括以下内容:

  1. 什么是架构,为什么重要,什么影响以及什么影响。
  2. 架构在业务,技术,项目和专业环境中扮演的角色。
  3. 架构和质量属性之间的至关重要的共生关系,如何指定质量属性要求,以及您快速沉浸在十几种最重要的质量保证中。
  4. 如何捕获对体系结构的架构上重要的要求。
  5. 如何设计架构,对其进行记录,指导其实施,对其进行评估,以查看其是否适合您的需求,对其进行反向工程以及围绕该项目进行管理。
  6. 如何评估架构的成本和收益,在架构上胜任意味着什么,以及如何将架构用作整个软件产品线的基础。
  7. 当前技术前沿上的系统的架构概念和模式:边缘应用程序和云。

好。 怎么办?

用一本令人振奋的命令来结束本书并设计出色的系统是非常诱人的。 但事实是,生活并非如此简单。

本书的作者共同在软件架构教学方面拥有大量令人尴尬的多年经验。 我们在教室里为学生提供此类书籍,从工业短期课程到从“有抱负”到“老手”的各行各业的软件架构师,我们都通过这种方式教书。而且,我们经常知道, 学生会认真学习我们所提供的知识,他们走进的组织在架构上不像现在的学生那么精明,而且我们的学生没有实践的方法将所学知识付诸实践。

如果您尚不存在,大多数人将无法为要分配给您的项目指定基于架构的哲学。 您将无法说“这个敏捷项目需要首席软件架构师!”,如果团队负责人认为敏捷方法不允许任何总体设计,那么它就会坚持下去。 您将不会说:“我们将在项目进度表中包括明确的架构评估”,并且每个人都遵守。 您将不会说:“我们将使用Views and Beyond方法和模板作为我们的体系结构文档”,并遵守您的指示。

为了避免您将所有时间都花在吸收本书上的时间上是浪费在迷茫的事业上,我们希望在本书结尾时提供一些建议,以将您所学的知识带入专业领域:

  1. 说正确的语言。 您现在知道架构是达到目的的手段,而不是目的本身。 您组织中的决策者通常关心目标,而不是手段。 他们关心的是产品,而不是那些产品的架构。 他们关心确保产品在市场上具有竞争力。 并且他们关心执行组织的营销和业务策略。 他们可能不会以结构上重要的术语来表达他们的担忧,而是以您必须翻译的市场术语来表达。
  2. 说正确的语言,第2部分。项目经理关心降低技术风险,可靠和切合实际的日程安排和预算,以及计划这些产品的生产。 在某种程度上,您可以证明专注于这些架构是合理的,那么您更有可能成功地获得执行本书中所倡导的一些实践的自由。 您确实可以证明这一关注点是正确的:健全的架构是无与伦比的降低风险策略,可靠的工作估算器和生产方法的良好预测器。
  3. 参与进来。将架构问题插入项目的最好方法之一是向没有机会看到它的利益相关者展示其价值。需求工程师就是一个很好的例子。通常,他们会与客户和用户会面,捕捉他们的疑虑,将其写下来,然后将要求从围栏(通常是很高的围栏)上扔给设计师。挑战这种种族隔离!尝试参与需求捕获活动。邀请自己参加会议。假设作为架构师,您想通过直接从马口中听到问题来理解问题。这将使您与需要帮助设计,评估和处理文档的非常重要的利益相关者接触。此外,这将使您有机会为需求捕获过程增加价值。因为您可能会考虑一种设计方法,所以您可能会提供比客户所想的更好的质量属性响应,这可能会使我们的营销人员感到非常满意。或者,您也许能够及早发现麻烦的需求,并帮助推动客户做出完全适当但在架构上更可口的质量检查响应。另外,您可以自己联系组织的营销人员。他们通常是提出产品概念的人。您最好了解他们如何做到这一点,最终您可以指出可能使用相同架构的现有产品的有用变化,从而为他们提供帮助。
  4. 这是经济,愚蠢的。思考并以经济术语表达您的观点。如果您认为架构贸易研究,架构文档或架构评估,或确保代码与架构相符是您的项目的好主意,请为其提出业务案例。尽管有漫画中尖尖的老板,但经理们确实是(在这里相信我们)理性的人。但是他们的目标很广泛,几乎总是与经济学有关。您应该能够辩解道理,例如,当系统进行重大更改时,生成架构文档的更新版本是值得的(例如)。您应该能够辩称,与没有指导性架构的情况下进行的那些相同活动相比,使用新架构文档进行的活动将更少出错(因此成本更低)。保持文档更新的工作量远远少于预期的节省量。您可以在电子表格中插入一些数字作为此参数。这些数字不一定是准确的,只是合理的,它们仍然可以证明您的情况。
  5. 开始游击运动。在您的组织中找到志趣相投的人,并培养他们对架构的兴趣。开始一个自带的午餐时间阅读和讨论小组,讨论小组讨论书籍,书籍章节或论文,甚至有关架构的博客。例如,您的小组可以阅读本书中有关架构能力的一章,并讨论您希望组织采用哪些实践以及采用这些实践需要采取什么措施。或者,小组可以就架构的联合文档模板达成一致,或者提出适用于您的集体项目的一组质量属性方案。尤其吸引人的是提出一套适用于您正在构建的系统的模式。或从您的单个项目中提出一个令人烦恼的设计问题,然后让小组为之编写书面解决方案。或者让该小组作为其他项目的巡回架构评估团队提供服务。您的小组应定期定期召开会议,并采取一系列具体的具体目标。热心且敬业的领导者(您呢?)的重要性是谁,他们渴望成熟于组织的架构实践,所以不要夸大其词。宣传您的会议,宣传您的结果,并不断要求更多成员加入您的论坛。
  6. 享受小胜利。您不必一夜之间改变世界。您所做的每一项改进都会使您和您的组织处在比以前更好的地方。

通过后门将架构审查纳入组织

如果您在网络上搜索“代码审查计算机科学”,则会发现数百万次匹配,它们描述了代码审查以及执行代码审查的步骤。 如果您搜索“设计评论计算机科学”,那么您会发现有用的内容很少。

其他学科通常会练习和教授设计评论。 搜索“设计评论”,您会发现许多热门歌曲以及相关说明。 设计是试图解决特定问题(无论是美术问题,用户界面设计问题还是软件问题)的任何类型的决策集。 重要的设计问题的解决方案应经过同行评审,就像代码应经过同行评审一样。

大量数据指出,在生命周期中越早发现并解决问题,发现和解决问题的成本就越低。 设计先于代码,因此进行适当的设计审查似乎在直观和经验上都是合理的。 此外,围绕评估的文档(包括原始设计文档和评论)对于新开发人员而言都是宝贵的学习工具。 在许多组织中,开发人员经常切换系统,因此他们不断学习。

这种观点并未得到普遍认同。 一家大型软件公司的软件工程师告诉我,即使该组织渴望编写和审阅设计文档,也很少发生。 高级开发人员倾向于将他们的评论限制在粗略的范围内。 另一方面,高级开发人员非常重视代码审查。 我的软件工程师朋友针对这种情况提供了两种可能的解释:

  1. 代码评审是影响构建内容的最后机会:“对其进行审查或与之一起使用。”这种解释假定高级开发人员不相信设计审查的输出是可操作的,因此要等到以后再参与。 过程。
  2. 代码比设计更具体,因此更易于评估。 此说明假定高级开发人员无法理解设计。

我认为这两种解释都不具有说服力,但我无法提出更好的解释。

怎么办?

该软件工程师所做的是寻找可以秘密执行设计审查的替代流程。 该个人注意到,当组织进行代码审查时,经常会问诸如“您为什么这样做?”之类的问题。 这些问题的结果是对基本原理的讨论。 因此,个人将为问题编写解决方案,将其提交给代码审查,然后等待将导致基本原理讨论的问题。

设计评审是对设计决策及其基本原理进行介绍的评审。 通常,会探索设计替代方案。 是以代码审查还是设计审查的名义完成此任务,并不比完成任务重要。

当然,我朋友的秘密方法有缺点。 编写可能不得不扔掉的解决方案效率很低。 此外,将设计评论嵌入代码审查意味着最终将设计和审查嵌入代码审查工具中,从而很难在该工具中搜索设计和设计依据。 但是,这些低效率与为特定问题寻求错误解决方案的低效率相形见绌。

—LB

软件系统架构的实践和纪律已经成熟。 您可以为加入一个一直努力并且仍在努力,变得更加有纪律,更可靠,更有生产力和更有效率的职业,以创造能够改善其利益相关者生活的系统而感到自豪。 有了这样的想法,现在该到书本式结束的时候了:继续并设计出色的系统。 您的前任设计的系统已经改变了世界。 轮到你了。

相关文章:

28.结语

文章目录28 Epilogue 结语28 Epilogue 结语 Don’t let it end like this. Tell them I said something. 不要让它就这样结束。 告诉他们我说了些什么 —Pancho Villa 您已到达旅程的尽头。 辛苦了 我们希望您能从本书中找到一些有价值的收获。 我们建议该列表应包括以下内…...

ICRS、GCRS、CIRS、TIRS和ITRS坐标系统简介

ICRS、GCRS、CIRS、TIRS和ITRS坐标系统简介1. 简介2. ICRS、GCRS、CIRS、TIRS和ITRS分别介绍2.1 ICRS详细说明2.2 GCRS详细说明2.3 CIRS详细说明2.4 TIRS详细说明2.5 ITRS 详细说明1. 简介 ICRS、GCRS、CIRS、TIRS和ITRS都是天文学中使用的坐标系统: ICRS (Intern…...

你是真的“C”——详解结构体知识点

你是真的“C”——详解结构体知识点😎前言🙌什么是结构体?🙌1. 结构体的声明🙌1.1 结构的基础知识1.2 结构的声明1.3 结构成员的类型1.4 结构体变量的定义和初始化2. 结构体成员的访问🙌3结构体传参&#x…...

2023新华为OD机试题 - 单词接龙(JavaScript) | 刷完必过

单词接龙 题目 单词接龙的规则是: 可用于接龙的单词,首字母必须要与前一个单词的尾字母相同; 当存在多个首字母相同的单词时,取长度最长的单词; 如果长度也相等,则取字典序最小的单词; 已经参与接龙的单词不能重复使用; 现给定一组全部由小写字母组成的单词数组, 并指…...

第一章 一般错误信息 - 错误代码 0 到 99

文章目录第一章 一般错误信息 - 错误代码 0 到 99一般错误信息错误代码 0 到 99第一章 一般错误信息 - 错误代码 0 到 99 一般错误信息 错误代码被报告为 ERROR #nnn。这些错误代码有时称为 %Status 错误代码。 可以使用 DisplayError() 和 Error() 方法确定指定错误代码的错…...

MyBatis 之一(概念、创建项目、操作模式、交互流程)

1. MyBatis 是什么MyBatis 是一款优秀的持久层框架MyBatis 也是一个 ORM (Object Relational Mapping)框架,即对象关系映射它支持自定义 SQL、存储过程以及高级映射MyBatis 去除了几乎所有的 JDBC 代码以及设置参数和获取结果集的工作MyBatis…...

学习笔记:文件

因为有的数据,数据量极大。或者是你想把编译输出的内容存储起来,就可以使用文件 读文件中内容具体操作 来自C语言详解 FILE文件操作 - 知乎 (zhihu.com) 写入文件具体操作 同样来自 C语言详解 FILE文件操作 - 知乎 (zhihu.com) 当文件关闭时&#xff0c…...

高考结束了以后应该做的事情(个人经历的总结)

高考结束了以后应该做的事情 在本指导中,我总结了我大学期间我认为做的没有后悔,最正确的事情。同时,根据我的经历和我踩过的坑总结出来了这一份入学指南。 这个指导有点偏向于工科生,已经尽量偏向于所有专业了。对于所有专业的同…...

蓝桥杯:k倍区间

[蓝桥杯 2017 省 B] k 倍区间给定一个长度为 N 的数列,A1,A2,…AN,如果其中一段连续的子序列 Ai,Ai1,…Aj 之和是 K 的倍数,我们就称这个区间 [i,j] 是 K 倍区间。你能求出数列中总共有多少个 K 倍区间吗?输入格式第一行包含两个整…...

【思维模型】概率思维的价值:找到你的人生算法!打开你的人生格局!实现认知跃迁!

把同样公平的机会放在放在很多人面前,不同的人生算法,会得到迥然不同的结果。 概率思维是什么? 【ChatGPT】概率思维是一种通过使用数学模型来思考和评估不确定性事件的方法。它通过计算不同可能性的概率来预测事件的结果,并评估风险和机会。 概率思维的价值在于它可以帮…...

API文档自动生成工具

一、参考资料 从Python源码注释,自动生成API文档 二、问题引入 不管是开源还是闭源,要让所有人都能读懂你的代码这太难了,所以文档是很重要的。大部分情况,我们不希望维护一份代码再加上一份文档,这样做很容易造成文…...

7、MyBatis框架——MyBatis对一对一关系的处理、分步查询、MyBatis对一对多关系的处理

目录 一、项目框架搭建 二、在实体类中添加额外属性实现多表查询 1、mybatis两表关联查询 (1)实体类类型映射规则 (2)代码演示 2、分步查询 (1)autoMapping开启自动映射 (2)…...

电商数据监测——中国白酒行业数据浅析

大国盛世酿,万家潭酒香。中国白酒是中国特色文化之一。 2022年,国内白酒总产量为671.2万千升,处于持续下滑的态势。 白酒产量不佳,但线上平台的销售情况却成绩优异。2022年,京东平台白酒的年度总销量超3500万件,同比去…...

excel数据技巧:透视表快速统计年终业绩排名

年关了,各种数据多得要命,要汇总,要排名,这样才好颁奖发红包。今天,数据透视表出来为Excel人送温暖了,不用分两步做,鼠标拖两下,同步搞定业绩统计与排名。临近年末,各行各…...

TensorRT的Python接口解析

TensorRT的Python接口解析 文章目录TensorRT的Python接口解析4.1. The Build Phase4.1.1. Creating a Network Definition in Python4.1.2. Importing a Model using the ONNX Parser4.1.3. Building an Engine4.2. Deserializing a Plan4.3. Performing Inference点此链接加入…...

【信管11.5】合同、采购、招投标相关法规

合同、采购、招投标相关法规关于法律法规相关的内容,其实并没什么可以多说的,我也只是列出来,大家挑着背吧。当然,这里也不都是完完全全的法律条文,有一些也可能是一些归纳总结。更具体的内容大家可以参考教材以及查阅…...

使用 CSS 变量更改多个元素样式

使用 CSS 变量更改多个元素样式 var() 函数用于插入自定义的属性值,如果一个属性值在多处被使用,该方法就很有用。 custom-property-name 是必需的, 自定义属性的名称,必需以 – 开头。 value 可选。备用值,在属性不存在的时候使…...

面试题(二十五)设计模式

1. 设计模式 1.1 说一说设计模式的六大原则 参考答案 单一职责原则 一个类,应当只有一个引起它变化的原因;即一个类应该只有一个职责。 就一个类而言,应该只专注于做一件事和仅有一个引起变化的原因,这就是所谓的单一职责原则…...

使用红黑树模拟实现map和set

在STL的源代码中&#xff0c;map和set的底层原理都是红黑树。但这颗红黑树跟我们单独写的红黑树不一样&#xff0c;它需要改造一下&#xff1a; 改造红黑树 节点的定义 因为map和set的底层都是红黑树。而且map是拥有键值对pair<K,V>的&#xff0c;而set是没有键值对&a…...

【django项目开发】用户登录后缓存权限到redis中(十)

这里写目录标题一、权限的数据的特点二、首先settings.py文件中配置redis连接redis数据库一、权限的数据的特点 需要去数据库中频繁的读和写&#xff0c;为了项目提高运行效率&#xff0c;可以把用户的权限在每次登录的时候都缓存到redis中。这样的话&#xff0c;权限判断的中…...

(LeetCode 每日一题) 3442. 奇偶频次间的最大差值 I (哈希、字符串)

题目&#xff1a;3442. 奇偶频次间的最大差值 I 思路 &#xff1a;哈希&#xff0c;时间复杂度0(n)。 用哈希表来记录每个字符串中字符的分布情况&#xff0c;哈希表这里用数组即可实现。 C版本&#xff1a; class Solution { public:int maxDifference(string s) {int a[26]…...

React Native 导航系统实战(React Navigation)

导航系统实战&#xff08;React Navigation&#xff09; React Navigation 是 React Native 应用中最常用的导航库之一&#xff0c;它提供了多种导航模式&#xff0c;如堆栈导航&#xff08;Stack Navigator&#xff09;、标签导航&#xff08;Tab Navigator&#xff09;和抽屉…...

R语言AI模型部署方案:精准离线运行详解

R语言AI模型部署方案:精准离线运行详解 一、项目概述 本文将构建一个完整的R语言AI部署解决方案,实现鸢尾花分类模型的训练、保存、离线部署和预测功能。核心特点: 100%离线运行能力自包含环境依赖生产级错误处理跨平台兼容性模型版本管理# 文件结构说明 Iris_AI_Deployme…...

多模态商品数据接口:融合图像、语音与文字的下一代商品详情体验

一、多模态商品数据接口的技术架构 &#xff08;一&#xff09;多模态数据融合引擎 跨模态语义对齐 通过Transformer架构实现图像、语音、文字的语义关联。例如&#xff0c;当用户上传一张“蓝色连衣裙”的图片时&#xff0c;接口可自动提取图像中的颜色&#xff08;RGB值&…...

CocosCreator 之 JavaScript/TypeScript和Java的相互交互

引擎版本&#xff1a; 3.8.1 语言&#xff1a; JavaScript/TypeScript、C、Java 环境&#xff1a;Window 参考&#xff1a;Java原生反射机制 您好&#xff0c;我是鹤九日&#xff01; 回顾 在上篇文章中&#xff1a;CocosCreator Android项目接入UnityAds 广告SDK。 我们简单讲…...

【Web 进阶篇】优雅的接口设计:统一响应、全局异常处理与参数校验

系列回顾&#xff1a; 在上一篇中&#xff0c;我们成功地为应用集成了数据库&#xff0c;并使用 Spring Data JPA 实现了基本的 CRUD API。我们的应用现在能“记忆”数据了&#xff01;但是&#xff0c;如果你仔细审视那些 API&#xff0c;会发现它们还很“粗糙”&#xff1a;有…...

【git】把本地更改提交远程新分支feature_g

创建并切换新分支 git checkout -b feature_g 添加并提交更改 git add . git commit -m “实现图片上传功能” 推送到远程 git push -u origin feature_g...

土地利用/土地覆盖遥感解译与基于CLUE模型未来变化情景预测;从基础到高级,涵盖ArcGIS数据处理、ENVI遥感解译与CLUE模型情景模拟等

&#x1f50d; 土地利用/土地覆盖数据是生态、环境和气象等诸多领域模型的关键输入参数。通过遥感影像解译技术&#xff0c;可以精准获取历史或当前任何一个区域的土地利用/土地覆盖情况。这些数据不仅能够用于评估区域生态环境的变化趋势&#xff0c;还能有效评价重大生态工程…...

什么是Ansible Jinja2

理解 Ansible Jinja2 模板 Ansible 是一款功能强大的开源自动化工具&#xff0c;可让您无缝地管理和配置系统。Ansible 的一大亮点是它使用 Jinja2 模板&#xff0c;允许您根据变量数据动态生成文件、配置设置和脚本。本文将向您介绍 Ansible 中的 Jinja2 模板&#xff0c;并通…...

JAVA后端开发——多租户

数据隔离是多租户系统中的核心概念&#xff0c;确保一个租户&#xff08;在这个系统中可能是一个公司或一个独立的客户&#xff09;的数据对其他租户是不可见的。在 RuoYi 框架&#xff08;您当前项目所使用的基础框架&#xff09;中&#xff0c;这通常是通过在数据表中增加一个…...