这是罗伯特·马丁(鲍勃叔叔)于2018年发行的新书《清洁建筑》的免费又简短的重述。
引言
软件体系结构有点像构建体系结构。 建筑物还具有分形结构:建筑物由隔室组成,隔室由房间组成,房间由墙壁组成,墙壁由砖块制成。 另一方面,程序由模块组成,模块由包组成,包由类组成,功能由类组成。 但是,程序结构的多样性比建筑物的多样性要广泛得多,因此Bob叔叔认为软件体系结构比建筑物体系结构“更具体系结构”。
此外,建筑物的架构比软件更容易在头部可视化,因为我们每天都在看建筑物,并且程序的架构对我们来说隐藏在源代码中。 软件架构与众不同。
另一方面,软件体系结构还必须记住物理限制,因为程序在性能,内存,网络带宽等有限的真实硬件上运行。
什么是好的架构? 这种架构不仅可以满足当前,
而且可以满足用户,企业所有者和程序员的需求。
“如果您认为好的架构很昂贵,那就试试吧。”
“快速前进的唯一方法就是前进。”
前言
鲍勃叔叔从事代码编写已有50多年了。 他编写了各种程序:大型,小型,GUI,控制台,Web等。 我得出的结论是,架构规则到处都是相同的! 尽管铁生产率得到了巨大的提高,但即使超过50年,它们也没有改变。
编程语言也变得更好了,但是基本结构却保持不变:if,赋值,循环等。 如果您从上世纪中叶开始为现代MacBook配备程序员,那么一开始它会变得很困难,但是在Idea中编写Java代码将是正常的。
但是50年前还没有积累半个多世纪的经验。 制定了规则,本书专门针对这些规则。
引言
编写工作程序很容易。 很难
正确编写程序 。 这需要知识,经验和技能,其发展需要大量的时间和纪律。
正确完成程序后,很容易进行维护和更改。 缺陷百分比非常低。 它不需要成群的程序员,大量有要求的文档和复杂的跟踪器。
这听起来像乌托邦式的,但是鲍伯叔叔设法从事了这些项目。 但不幸的是,在大多数情况下,我们必须进行糟糕的设计。
什么是设计和建筑?
让我们假设设计和体系结构是相同的。
体系结构不仅是高层,而且是整个高层和底层的细节。 一个没有另一个的不存在。
软件体系结构的目标是
最大程度地减少构建和维护所需系统所需
的人力资源 。
如果付出的努力很小,并且
一生都
坚持下去 ,那么设计就是好的。 如果每次发布都付出更多努力,那么设计就很糟糕。
例如,鲍勃叔叔展示了一个真实项目的图形,其中员工数量增加了50倍,而代码行数仅增加了2.3倍(3M-> 7M)。 更可怕的图形是单行代码的成本增加了约40倍。 即 生产率从100%下降到几乎为零。 程序员尽了最大的努力,但是基本上什么也做不了。 而现在最糟糕的事情是:如果在第一个版本中我们必须每月向员工支付数十万美元,那么最终这个数字将变成每月2000万美元!
接下来,鲍伯叔叔回忆起野兔和乌龟的寓言。 在其中,乌龟赢得了比赛,因为野兔过于自信,上床睡觉,整场比赛都睡了。
开发过程也是如此:程序员对自己充满了兴趣,他有信心可以迅速推出产品,并在以后恢复订单。 但是,问题在于发布后他需要做下一项功能,否则他将落后于市场上的竞争对手。 最后,几个月后,他的生产力将仅下降至零,而他将损失。
然后,他给出了由某个Jason Gorman进行的实验的示例,其中他多次编写了一个简单的程序。 事实证明,使用TDD时,第一次比甚至没有TDD的第三次都快。 也就是说,如果编写正确,则结果会更快。
开发人员必须对他引入项目的混乱
负责 。 必须认真对待建筑质量。 但是为此,您需要知道什么是好的架构。
关于两个价值观的故事
有两个值-行为和体系结构。
行为意味着程序符合功能要求,从而为企业所有者带来了收益。 问题是许多程序员认为这是他们的工作。
第二个值是程序保持在维持状态的质量。 即,很容易改变。 变更的复杂度应与这些变更的规模成正比,但与形式无关。 体系结构不应优先选择某些形式,否则每次都难以实现所有者的要求。
更重要的是行为还是架构? 经理们认为,系统正常运行更为重要。 但是程序员应该考虑相反的情况,即体系结构更重要。
艾森豪威尔矩阵表示,重要和非紧急的优先级高于紧急和不重要的优先级。 与行为相比,体系结构始终很重要,因此它具有更高的优先级。
程序员必须为架构而战。 程序员也是企业的一员。 建筑是他的责任。
待续...