我被问到的一个常见问题是“我如何制定架构决策我的标准答案是“取决于情况”。 虽然这是面颊回答的舌头,但它有一点道理。 尽管存在尝试解决该问题的框架和方法,但现实情况是,“软件体系结构”的实践本质上是一团糟 ,当然也是一个邪恶的问题 。 话虽如此,我将对“我如何做”有所了解。
首先,我要说的是,很多“决定”通常是由您的主要目标预先确定的,或者背后具有强大的力量,因此考虑替代解决方案的价值很小。 一个很好的例子是“我应该使用哪种编程语言来开发Android应用程序 您确实有一个决定,而且它很二进制:“我使用Java还是JavaScript是的,从技术角度来看,可以使用任何编程语言(通过交叉编译或使用运行时解释器),但是如果您的主要目标是发布允许用户“在手机上做某事”的应用程序,那么可能的选择是浪费大量时间。 另一方面,如果您的主要目标是说明如何使用ruby编写要在android设备上运行的应用程序,那么该决定是预先确定的(坦率地说,实际上不是一个决定)。 此外,在后一种情况下,决定从“我应该使用哪种语言换。 “我应该使用哪种方法在android上运行ruby应用程序
在上述前一种情况下,假设我们的主要目标是编写一个应用程序,允许用户在手机上跟踪其锻炼情况。 在这种情况下,您使用的“语言”是相关的,但仅是次要的。 您现在必须关心的一些问题是“有多少人知道Java与JavaScript“我最终要在iOS和Android中发布该应用程序吗 此外,您还必须关注“ JavaScript开发人员的价格便宜/快速还是Java开发人员和“哪种方法更易于测试和调试
但是,在后一种情况下,一些问题是:“我是否想利用Ruby的动态特性来突出显示或“说明Ruby如何导致更高质量的代码或其他类似的东西“我想说明相对于Java而言,Android上的Ruby应用程序可以成为开发者的速度有多快 这也打开了您需要考虑的另一种蠕虫病毒,例如“是否是Ruby开发人员库,使得使用该语言进行开发甚至是可行的
正如我们所看到的,考虑因素的数量呈指数增长,并且对初始条件极为敏感(即主要问题是什么)。 如果您更改“主要问题”,则整个决策都是无关紧要的(如果您的目标是用ruby编写东西,为什么不用担心javascript 这个问题使建筑决策变得尤为有害,我认为这表现出非线性系统的 分形特征。 这也是为什么还没有人提出一个全面的“系统”来做出这些决定的原因。 尽管许多人主张使用方法论和方法(看看IBM关于它必须说些什么,但事实是,这是一个很难解释的问题。
我最好的建议是:体系结构就像软件气象学一样,您无法预测未来,但是可以使用适用于定义范围的通用模型。 这是什么意思而言之,尝试定义软件体系结构就像尝试定义整个地球的天气。 事实是,“无所谓”的主要目的是确定您是否要去游泳池。 真正重要的是当地的天气以及您对想要进入游泳池的那种天气的偏好。此外,您不必解释“为什么选择去海滩而不是游泳池”,因为您意识到您最初的愿望是“去游泳”,并且将您的选择限制为游泳池可能是一个错误(出于其他原因)。 换句话说,“软件体系结构正在理解什么是重要的”和“做出重要的决定”,即艺术正在学习如何弄清什么是重要的,而科学则太复杂了,无法思考。
- 编码架构
- 邪恶的问题
- 驯服,凌乱和邪恶
- 创造性的问题解决
翻译自: https://www.javacodegeeks.com/2017/07/software-architectural-decision-making.html
文章知识点与官方知识档案匹配,可进一步学习相关知识OpenCV技能树首页概览11562 人正在系统学习中 相关资源:WantWords:一个开源的在线反向词典_反向词典-其它代码类资源-CSDN…
声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!