要想开发成功的软件,开发者必须根据设计策略去作最优的解决方案。尽管有时候,比较简单的问题,无须考虑太多,“梭哈”就完了,既快速又有效。然而,随着业务的变化和系统复杂性的增长,设计上的问题始终会出现的,就像不规范的代码会带来不少隐患和技术债务,这些都是要还的。
凡事预则立,没有架构设计策略的开发,很容易陷入错误混乱中,开发工做难以进行下去。所以,要学会运用思惟模式(见《架构设计思惟模式》)和思惟沉淀循环(见《架构设计思惟模式实践流程》),去制定最优的设计策略。架构
最优的设计策略不是追求让架构设计达到完美的状态,应该清楚这是不可能,由于在现实开发中会有时间、资金成本、技术、知识、业务变化等限制致使架构设计不可能作到完美。学习
所以,咱们的目标是找到一个够用的设计,这个架构设计能适应当前企业环境(知足利益相关方的需求等)和灵活应对业务变化。.net
寻找够用的架构设计,能够参考以下策略:架构设计
以上策略可能理解起来有点难度,下面就我的理解再次一一说明下。设计
要想能快速验证解决方案,必需要创建一套快速验证解决方案的机制。虽然架构师不是什么技术先知,但能够运用如下机制来快速验证解决方案:能够先“纸上谈兵”(头脑风暴、参考过去经验、决策矩阵等)来快速肯定待验证的解决方案,再以“胜兵先胜后求战”的思想来优先验证最可能有效的解决方案,最后再运用各类实验的方法去验证解决方案。blog
这里要引用下工程学历史学家Henry Petroski的话:资源
失败的概念是设计过程的核心,正所谓“失败乃成功之母”,经过消除失败,可达致成功之设计。开发
作架构设计是必定要设法消除失败的风险,但现在“巨人的肩膀”(各类消除风险的设计技术)实在太多了,很容易陷入了选择困难的泥沼里。get
所以,这里的“设法下降风险”应该是根据风险驱动的,即思考风险大小和解决的优先级、选择合适的技术去行动、评估下降风险的程度再决定下一步设计,这里其实就是运用思惟沉淀循环的思考、行动、检查步骤。软件
简化问题不仅仅是为了应对日益增加的复杂性和规模,还有开发成本和维护成本等问题。若是把问题想得过于复杂也是不行的,那就可能过分设计了。为何会这样?每每是由于咱们对问题理解的不够深刻,这时候应该运用思惟沉淀循环去理解问题,积累知识,再运用循环去把问题抽象或者分而治之。
快速迭代学习,这也是敏捷开发的原则。若是一次迭代学习的时间过长,首先极可能知足不了业务的时效性,其次时间长没法灵活应对变化,最后可能会致使维护的代价很高。由于通常周期长的迭代,实现的功能多,依赖多,复杂度高,一旦出现问题,纠正问题的成本和代价就很高了。所以,架构设计必须快速迭代学习,保证灵活性和不断进化的特性。
问题的解法是不少的,越成熟的技术,越多成熟的解决方案,但并非都合适的。由于每一个项目和技术团队是有差别的,并不能“一招鲜,吃遍天”,还须要根据自身的拥有的条件去证实某个解决方案确实是最优的。这是很是契合思惟沉淀循环的,由于思考了问题行动后确定是须要进行检查的。
虽然理想的架构设计是不可能的,可是也不能没有实际适用追求的。寻找够用的设计实际上是强调架构设计的度,要运用高效设计策略去寻找恰如其分的架构设计。由于过分或者过简的架构设计是不行的,过分必然浪费资源,过简必然没法规避风险。