2

架构设计策略之寻找够用的设计

 3 years ago
source link: https://segmentfault.com/a/1190000039774355
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

要想开发成功的软件,开发者必须根据设计策略去做最优的解决方案。尽管有时候,比较简单的问题,无须考虑太多,“梭哈”就完了,既快速又有效。然而,随着业务的变化和系统复杂性的增加,设计上的问题始终会出现的,就像不规范的代码会带来很多隐患和技术债务,这些都是要还的。
凡事预则立,没有架构设计策略的开发,很容易陷入错误混乱中,开发工作难以进行下去。因此,要学会运用思维模式(见《架构设计思维模式》)和思维沉淀循环(见《架构设计思维模式实践流程》),去制定最优的设计策略。

找到够用的设计

最优的设计策略不是追求让架构设计达到完美的状态,应该清楚这是不可能,因为在现实开发中会有时间、资金成本、技术、知识、业务变化等限制导致架构设计不可能做到完美。

因此,我们的目标是找到一个够用的设计,这个架构设计能适应当前企业环境(满足利益相关方的需求等)和灵活应对业务变化。

寻找够用的架构设计,可以参考如下策略:

  • 快速验证解决方案:解决方案验证的速度越快,就越快找到合适的架构设计,项目就能越快受益。
  • 设法降低风险:架构设计失败是很严重的问题,必须时刻考虑可能出现的风险,并根据风险来进行设计。
  • 努力简化问题:运用分治、知识和抽象等方法,去理解和简化复杂性不断增长的问题。
  • 快速迭代学习:运用思维沉淀循环快速学习,快速积累知识,就能快速实现目标。
  • 同时考虑问题的解法和证法:能解答问题的设计方案可能有很多,但能证明适用有效的设计方案,可能寥寥无几。因此,需要同时考虑问题的解法和证法,以便高效地找到够用的设计。

以上策略可能理解起来有点难度,下面就个人理解再次一一说明下。

快速验证解决方案

要想能快速验证解决方案,必须要建立一套快速验证解决方案的机制。虽然架构师不是什么技术先知,但可以运用以下机制来快速验证解决方案:可以先“纸上谈兵”(头脑风暴、参考过去经验、决策矩阵等)来快速确定待验证的解决方案,再以“胜兵先胜后求战”的思想来优先验证最可能有效的解决方案,最后再运用各种实验的方法去验证解决方案。

设法降低风险

这里要引用下工程学历史学家Henry Petroski的话:

失败的概念是设计过程的核心,正所谓“失败乃成功之母”,通过消除失败,可达致成功之设计。

做架构设计是一定要设法消除失败的风险,但如今“巨人的肩膀”(各种消除风险的设计技术)实在太多了,很容易陷入了选择困难的泥沼里。

因此,这里的“设法降低风险”应该是根据风险驱动的,即思考风险大小和解决的优先级、选择合适的技术去行动、评估降低风险的程度再决定下一步设计,这里其实就是运用思维沉淀循环的思考、行动、检查步骤。

努力简化问题

简化问题不单单是为了应对日益增长的复杂性和规模,还有开发成本和维护成本等问题。如果把问题想得过于复杂也是不行的,那就可能过度设计了。为什么会这样?往往是因为我们对问题理解的不够深入,这时候应该运用思维沉淀循环去理解问题,积累知识,再运用循环去把问题抽象或者分而治之。

快速迭代学习

快速迭代学习,这也是敏捷开发的原则。如果一次迭代学习的时间过长,首先很可能满足不了业务的时效性,其次时间长无法灵活应对变化,最后可能会导致维护的代价很高。因为一般周期长的迭代,实现的功能多,依赖多,复杂度高,一旦出现问题,纠正问题的成本和代价就很高了。因此,架构设计必须快速迭代学习,保证灵活性和不断进化的特性。

同时考虑问题的解法和证法

问题的解法是很多的,越成熟的技术,越多成熟的解决方案,但并不是都合适的。因为每个项目和技术团队是有差异的,并不能“一招鲜,吃遍天”,还需要根据自身的拥有的条件去证明某个解决方案确实是最优的。这是非常契合思维沉淀循环的,因为思考了问题行动后肯定是需要进行检查的。

虽然理想的架构设计是不可能的,但是也不能没有实际适用追求的。寻找够用的设计其实是强调架构设计的度,要运用高效设计策略去寻找恰如其分的架构设计。因为过度或者过简的架构设计是不行的,过度必然浪费资源,过简必然无法规避风险。


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK