美文网首页整洁架构之道
我们说的软件架构究竟是什么?

我们说的软件架构究竟是什么?

作者: Joker看看世界 | 来源:发表于2021-01-10 20:47 被阅读0次

什么是架构?

当我们开始一个新的软件项目时,开发负责人会说,我们先来设计架构;当我们接手其他人的项目时会说,把架构图给我看看,一切都离不开架构图。

那么,架构到底是什么呢?

架构=设计,这两者之间没有任何区别。大到系统与系统之间的交互,小到一个确定按钮的样式,都是设计,都是架构的一部分。

在我们的开发中,架构一般用于“高层级”的讨论,而设计往往用来指代具体的“系统底层”的组织结构和实现细节,即架构偏宏观,设计偏微观,但它们实际上是相同的,只是描述粒度不一样而已。

那架构设计的目的是什么呢,为什么要进行架构设计?一句话来描述就是:

最小的人力成本来满足构建和维护该系统的需求

我们可以简单的用一个简单的指标来量化一个软件的架构设计好坏:

单行代码改动成本

我们来看一张图,好的架构,其每行代码的变更成本随着版本迭代基本是不动的;而差的架构,其变更成本随着版本的迭代将会呈指数或线性增长:

每行代码变更成本趋势图

如果系统的单行代码改动成本在不断增加,那么我们就要好好反思一下,架构设计是否存在不足的地方。

麻乱的系统是如何产生的?

在我们的开发过程中,不知道有没有遇到这样的情况:下周就要上线,时间来不及了,不考虑代码性能、结构分层、复用,直接狂写一通,产出几个上千行代码的函数,然后心里想着未来空闲的时候再进行重构优化。

如此经历多几次迭代之后,我们会忽然发现,想要改动这里的一行代码太难了:花半天才看懂这上千行代码的函数,之后又花半天时间回归测试这个函数。

一天时间就这样没了,但其实我们只改了其中一行代码。

经过持续、多次以下这样一个迭代,一个麻乱系统就产生了:

麻乱系统的一次迭代

这种现象在软件开发中不是个例,而是普遍存在的。在我们开发系统的过程中,会产生两个价值:行为价值架构价值

只要我们的代码可以正常运行,功能可以正常使用,那么它就具有行为价值;而架构价值顾名思义,就是我们开发的系统,经过精心设计,架构合理,后续扩展维护简单,这个系统就具有很好的架构价值。也即:

软件系统的价值 = 行为价值 + 架构价值

上面描述的那种未经过任何设计的代码,它的架构价值为0。也最是符合大部分业务人员的思维:快速上线、能正常使用就行。

但作为开发人员,应该时刻为自己的系统的架构价值考虑。

开发人员的错觉

大部分开发人员是具有很强的技术追求,但面临业务人员“快速上线”的要求时,他们往往会把自己的技术追求搁置一边,开发出一个难以维护的系统,这是为什么呢?

因为开发人员往往存在错觉:

  • 容忍糟糕的代码可以在短期内加快上线速度,未来这些代码只会造成一点额外的工作量
  • 产品上线最重要,我们未来可以重构优化

然而,糟糕的代码上线之后,大家就把重构优化的事情抛在脑后,继续投入到下一个忙碌的迭代中去了。直到有一天接到一个需求,要改动旧的代码,这时候开发人员会说,这垃圾代码是谁写的,让我怎么改,一看commit,哦,原来是我自己,重构太耗时间了,我先继续往上堆代码吧。

如此经历几次迭代,业务人员想要增加一个功能时,原本只需要一天的时间,现在可能要一个星期了。长此以往,不管是老员工,还是新加入的成员,都不得不通过加班去满足开发进度,进而产生深深地挫败感。

最为可悲的是,开发人员自始至终都没有意识到,他的想法都是错的。

容忍糟糕的代码并没有加快上线速度,无论是短期还是长期来看,经过认真设计的代码,都具有更快的上线速度;未来也没有机会重构优化,而且重构优化的效果不一定比现在的好。

切身感悟:

一、编写糟糕的代码不能加快上线速度;
二、未来没有时间重构;
三、好的程序员必然不能容忍不好的架构设计,缺少时间都是开发人员自己想出来的接口,而不是决策层的想法;
四、复利的理论可以应用在代码质量上。

相关文章

  • 我们说的软件架构究竟是什么?

    什么是架构? 当我们开始一个新的软件项目时,开发负责人会说,我们先来设计架构;当我们接手其他人的项目时会说,把架构...

  • 我怎么才能成为一个软件架构师?

    什么是软件架构师 在我们一头扎入细节之前,我们先得知道软件架构和架构师到底是什么: 软件架构师是一个软件专家,他可...

  • 架构整洁之道-读书笔记

    1.设计与架构究竟是什么: 软件架构的终极目标,用最小的人力成本来满足构建和维护该系统的需求。 2.架构的两个价值...

  • Android关于MVC / MVP / MVVM / Andr

    架构是什么 架构是又名软件架构,是有关软件整体结构与组件的抽象描述,用于指导大型软件系统各个方面的设计 架构模式是...

  • IOS架构模式MVC、MVP、MVVM

    软件架构的定义?它的存在意义是什么? 软件架构是一系列相关的抽象模式,用于指导软件系统各个方面的设计。软件架构描述...

  • 架构设计的几点思考

    软件架构的意义 软件架构的意义是什么,有很多不同的理解和争议,这里不想就软件架构的意义给出完整的定义,而是想聊聊其...

  • 「整洁架构」实战 MVC 架构重构到整洁架构

    软件架构介绍 什么是软件架构 我们先来看看维基百科对 软件架构 的定义, 软件架构是有关软件整体结构与组件的抽象描...

  • 软件架构知识搜集

    本文主要搜集,软件架构相关的,好文章。以链接和简介的方式给出。 软件架构设计-五视图方法论本文讲述了软件架构是什么...

  • 《微服务架构设计模式》读书笔记---第二章:微服务拆分策略

    架构是什么 首先看下软件架构的含义。 计算机系统的软件架构是构建这个系统所需要的一组结构,包括软件元素、它们之间的...

  • 软件设计的三层架构

    1:三层架构是什么? 三层架构是一个分层式的软件体系架构设计理念。 把软件架构分为三层; 1:UI层 (user ...

网友评论

    本文标题:我们说的软件架构究竟是什么?

    本文链接:https://www.haomeiwen.com/subject/zglqaktx.html