28.结语
文章目录
- 28 Epilogue 结语
28 Epilogue 结语
Don’t let it end like this. Tell them I said something.
不要让它就这样结束。 告诉他们我说了些什么
—Pancho Villa
您已到达旅程的尽头。 辛苦了
我们希望您能从本书中找到一些有价值的收获。 我们建议该列表应包括以下内容:
- 什么是架构,为什么重要,什么影响以及什么影响。
- 架构在业务,技术,项目和专业环境中扮演的角色。
- 架构和质量属性之间的至关重要的共生关系,如何指定质量属性要求,以及您快速沉浸在十几种最重要的质量保证中。
- 如何捕获对体系结构的架构上重要的要求。
- 如何设计架构,对其进行记录,指导其实施,对其进行评估,以查看其是否适合您的需求,对其进行反向工程以及围绕该项目进行管理。
- 如何评估架构的成本和收益,在架构上胜任意味着什么,以及如何将架构用作整个软件产品线的基础。
- 当前技术前沿上的系统的架构概念和模式:边缘应用程序和云。
好。 怎么办?
用一本令人振奋的命令来结束本书并设计出色的系统是非常诱人的。 但事实是,生活并非如此简单。
本书的作者共同在软件架构教学方面拥有大量令人尴尬的多年经验。 我们在教室里为学生提供此类书籍,从工业短期课程到从“有抱负”到“老手”的各行各业的软件架构师,我们都通过这种方式教书。而且,我们经常知道, 学生会认真学习我们所提供的知识,他们走进的组织在架构上不像现在的学生那么精明,而且我们的学生没有实践的方法将所学知识付诸实践。
如果您尚不存在,大多数人将无法为要分配给您的项目指定基于架构的哲学。 您将无法说“这个敏捷项目需要首席软件架构师!”,如果团队负责人认为敏捷方法不允许任何总体设计,那么它就会坚持下去。 您将不会说:“我们将在项目进度表中包括明确的架构评估”,并且每个人都遵守。 您将不会说:“我们将使用Views and Beyond方法和模板作为我们的体系结构文档”,并遵守您的指示。
为了避免您将所有时间都花在吸收本书上的时间上是浪费在迷茫的事业上,我们希望在本书结尾时提供一些建议,以将您所学的知识带入专业领域:
- 说正确的语言。 您现在知道架构是达到目的的手段,而不是目的本身。 您组织中的决策者通常关心目标,而不是手段。 他们关心的是产品,而不是那些产品的架构。 他们关心确保产品在市场上具有竞争力。 并且他们关心执行组织的营销和业务策略。 他们可能不会以结构上重要的术语来表达他们的担忧,而是以您必须翻译的市场术语来表达。
- 说正确的语言,第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) 当文件关闭时,…...
高考结束了以后应该做的事情(个人经历的总结)
高考结束了以后应该做的事情 在本指导中,我总结了我大学期间我认为做的没有后悔,最正确的事情。同时,根据我的经历和我踩过的坑总结出来了这一份入学指南。 这个指导有点偏向于工科生,已经尽量偏向于所有专业了。对于所有专业的同…...
蓝桥杯: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的源代码中,map和set的底层原理都是红黑树。但这颗红黑树跟我们单独写的红黑树不一样,它需要改造一下: 改造红黑树 节点的定义 因为map和set的底层都是红黑树。而且map是拥有键值对pair<K,V>的,而set是没有键值对&a…...
【django项目开发】用户登录后缓存权限到redis中(十)
这里写目录标题一、权限的数据的特点二、首先settings.py文件中配置redis连接redis数据库一、权限的数据的特点 需要去数据库中频繁的读和写,为了项目提高运行效率,可以把用户的权限在每次登录的时候都缓存到redis中。这样的话,权限判断的中…...
算法总结c++
文章目录基本概念时间复杂度空间复杂度基本结构1. 数组前缀和差分数组快慢指针(索引)左右指针(索引)盛水容器三数之和最长回文子串2. 链表双指针删除链表的倒数第 n 个结点翻转链表递归将两个升序链表合并为一个新的 升序 链表链表翻转3. 散列表twoSum无…...
Python 之 NumPy 切片索引和广播机制
文章目录一、切片和索引1. 一维数组2. 二维数组二、索引的高级操作1. 整数数组索引2. 布尔数组索引三、广播机制1. 广播机制规则2. 对于广播规则另一种简单理解一、切片和索引 ndarray 对象的内容可以通过索引或切片来访问和修改(),与 Pytho…...
Redis【包括Redis 的安装+本地远程连接】
Redis 一、为什么要用缓存? 缓存定义 缓存是一个高速数据交换的存储器,使用它可以快速的访问和操作数据。 程序中的缓存 在我们程序中,如果没有使用缓存,程序的调用流程是直接访问数据库的; 如果多个程序调用一个数…...
深度学习训练营_第P3周_天气识别
🍨 本文为🔗365天深度学习训练营 中的学习记录博客🍦 参考文章:Pytorch实战 | 第P3周:彩色图片识别:天气识别**🍖 原作者:K同学啊|接辅导、项目定制**␀ 本次实验有两个新增任务&…...
“华为杯”研究生数学建模竞赛2006年-【华为杯】C题:维修线性流量阀时的内筒设计问题(附获奖论文及matlab代码)
赛题描述 油田采油用的油井都是先用钻机钻几千米深的孔后,再利用固井机向四周的孔壁喷射水泥砂浆得到水泥井管后形成的。固井机上用来控制砂浆流量的阀是影响水泥井管质量的关键部件,但也会因磨损而损坏。目前我国还不能生产完整的阀体,固井机仍依赖进口。由于损坏的内筒已…...
数据结构:带环单链表基础OJ练习笔记(leetcode142. 环形链表 II)(leetcode三题大串烧)
目录 一.前言 二.leetcode160. 相交链表 1.问题描述 2.问题分析与求解 三.leetcode141. 环形链表 1.问题描述 2.代码思路 3.证明分析 下一题会用到的重要小结论: 四.leetcode142. 环形链表 II 1.问题描述 2.问题分析与求解 Judgecycle接口…...
数模美赛如何找数据 | 2023年美赛数学建模必备数据库
2023美赛资料分享/思路答疑群:322297051 欧美相关统计数据(一般美赛这里比较多) 1、http://www.census.gov/ 美国统计局(统计调查局或普查局)官方网站 The Census Bureau Web Site provides on-line access to our …...
SSTI漏洞原理及渗透测试
模板引擎(Web开发中) 是为了使 用户界面 和 业务数据(内容)分离而产生的,它可以生成特定格式的文档, 利用模板引擎来生成前端的HTML代码,模板引擎会提供一套生成HTML代码的程序,之后…...
【算法基础】高精度除法
👦个人主页:Weraphael ✍🏻作者简介:目前是C语言 算法学习者 ✈️专栏:【C/C】算法 🐋 希望大家多多支持,咱一起进步!😁 如果文章对你有帮助的话 欢迎 评论💬…...
optimizer.zero_grad(), loss.backward(), optimizer.step()的理解及使用
optimizer.zero_grad,loss.backward,optimizer.step用法介绍optimizer.zero_grad():loss.backward():optimizer.step():用法介绍 这三个函数的作用是将梯度归零(optimizer.zero_grad())&#x…...
wordpress adams主题/色盲测试图第六版
iPhone应用程序是由主函数main启动,它负责调用UIApplicationMain函数,该函数的形式如下所示: int UIApplicationMain ( int argc, char *argv[], NSString *principalClassName, NSString *delegateClassName ); 那么UIApplicationMain函数到…...
百度手机网站优化指南/营销网
企业老板还在为处理有机废气烦恼吗?您应该了解一下活性炭吸附法工业有机废气是指工业生产过程中排出的含挥发性有机物的气态污染物,这些废气如果得不到有效处理会对工作人员和周围环境造成严重的危害。因此治理有机废气,让废气排放达到环保标…...
布吉网站建设哪家便宜/网站流量统计工具
在看软考题目中,发现软件开发中有许多各阶段对任务的定义。在采用结构化开发方法进行软件开发时,设计阶段接口设计主要依据需求分析阶段的数据流图,接口设计的主要任务是描述软件与外部环境之间的交互关系,软件内模块之间的调用关…...
做垃圾网站怎么赚钱/关键词推广工具
1,使用 严格模式的使用很简单,只有在代码首部加入字符串 "use strict"。必须在首部即首部指其前面没有任何有效js代码除注释,否则无效 2.注意事项 (1)不使用var声明变量严格模式中将不通过,在…...
免展网站后台注册/微信小程序开发费用
很多小伙伴都表示:什么?用好Excel就可以做这年头最炫酷的人力资本分析师?这和我想象中的完全不一样啊!怎么着……也得写写代码才够逼格吧?好的,今天就满足你们想要写代码的愿望。 图片来自网络,…...
模板网站不可以做seo优化吗/上海seo优化培训机构
回到系列文章的目录——[系列文章目录] 回到本章目录——[第1章目录]1.2 让程序“跑”起来把程序写在纸上,有思考,有实践,这种方式可以有。 把程序输入到计算机,让计算机“跑”程序,这种方式最直观。这也是让程序…...