设计心得—如何简单评估软件设计

一、软件的设计分析
对于设计者或者开发者来说,经常会遇到一个问题。如何对软件进行设计或重构?这时候,很多设计者经常会拿出各种的软件工程的书籍和各种级别的标准,从各个角度来对设计进行逐一的拆解分析,最后得出一个结论。
或者有的设计者可能会抓大放小,根据不同实际情况,引入相应级别的具体原则和方法,不拘泥于标准或各种情况的限制。
从整体上来讲,这些方法都是可取的。但在实际的应用中,有没有一种比较简单有效的方式呢?
二、如何简单地评估设计是否可取
对于想使用简单有效的方法来评判软件设计如何?可以从应用的角度来进行一个评判设计(包含重构)。一般从三个角度来进行分析。主要包括:
-
对于主要设计原则的处理
这个其实最容易为大家所理解,就是把常见的几大原则(如开闭原则等)或常见的设计标准比如函数的大小等等(千万不要陷入到细节里),给一个显而易见的结果打分。一般来说,如果不是具备一些特别的原因,这些原则和标准是要遵循的。 -
设计是否简单、实现是否简单
这个其实难度非常大。很多出于各种设计目的原则或实际情况的要求(比如某些领导指导必须使用哪种框架等),引入了大量的冗余设计。另外,光设计简单不行,实现难度大,同样可能导致设计的不合理。比如实现一个普通的算法,引入更多的数学知识等等。所以能否在现行条件下以相对最简单的方式实现是一种很重要的先决条件。 -
设计能产生多少收益
设计(或重构)最主要的目的是要有收益。这种收益可能是金钱上的,也可能是维护上的,还可能是运行效率上的等等。但总归,都是要有收益的。没有收益的设计,特别是重构,基本就没有意义了
在实际的应用中,可以从这三个角度动态的组合进行分析,结合具体的设计场景,灵活的来应对设计的结果评估。
三、分析说明
可以通过一句话来实现对上述三个评判的角度的应用即“评判基础是前提,是否优秀看简单,决定使用看收益”。
这句话听起来很清晰明白。但其实也有不少的可拉扯的问题。比如怎么样判断为了实现某些特殊情况是否需要突破原则?最常见如数据设计中为了数据访问效率突破第三范式的问题。另外,大家一定要明白,所谓简单和复杂,它是一个典型的相对概念而不是一个绝对的概念。这就导致在现实的设计中,很容易让不同的能力的人在不同的场景下的评判标准在动态变化。而这种变化,往往是一种认知的体现。比如一个重要的软件设计(重构)往往会最终提到决策层进行处理,而决策层可能对这些技术问题并不敏感。
最后,对于设计(重构)中的收益问题,会有一个解决当下的问题与中长期处理某些问题的一种权衡。而所谓的中长期,每个人每个时期都有可能有所不同。所以这种收益其实是非常模糊的,一般建议不要考虑长期收益,而中期收益也要非常谨慎的考虑。也就是说,设计(重构)中有出于这些考虑进行的工作,都可以谨慎的认为没有太大价值。
从实际的经验来看,中长期,特别是长期的收益基本可以不用考虑。意义几乎不存在,后面的人铁定会推翻相关的设计或者干脆把它当成屎山,根本不会动。大家可以想一想,为什么互联网特别是移动互联网996是一种常态?根本原因就是在于不断的进行“全新”式的设计(重构)么。
四、总结
当然,上面只是一些从实践中得到的经验方法,它未必是适应于所有的情况。但在一些常见的场景下,用处还是非常大的。另外,这只是从技术角度的一种分析,而实际情况中,非技术的影响往往更强大。这就需要设计者能够深入技术,又能跳到技术之外。
夜雨聆风