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

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

找到够用的设计

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

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

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

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

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

    快速验证解决方案

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

    设法降低风险

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

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

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

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

    努力简化问题

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

    快速迭代学习

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

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

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

    总结

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

    全栈开发,后端主要java,前端react、vue、mui;大数据学习中,主要致力于数仓研究和架构设计,欢迎大家...

    1 声望
    1 粉丝
    0 条评论
    推荐阅读
    编程是什么
    我们为什么提出“编程是什么”这个问题,是因为我们想要解决编程的相关问题。如果问题都理解错误,那就难以解决问题了。那为什么不是提出别的问题?因为对于要讨论的主题做好定义是非常重要的,就像我们学习任何一...

    赞成理智阅读 764

    浅谈系统稳定性与高可用保障的几种思路
    高并发、高可用、高性能被称为互联网三高架构,这三者都是工程师和架构师在系统架构设计中必须考虑的因素之一。今天我们就来聊一聊三H中的高可用,也是我们常说的系统稳定性。

    得物技术1阅读 524

    手写 Spring,写到简历上被怼?
    作者:小傅哥博客:[链接]图书:[链接]沉淀、分享、成长,让自己和他人都能有所收获!一直都有一个非常好的硬核项目在你我身边,复杂的架构、优秀的设计、强悍的实现。如果能跟着实现一遍,编码能力至少提升3年!...

    小傅哥1阅读 522

    封面图
    轻量级的架构决策记录机制
    •新成员加入团队,对系统现有的架构决策可能会盲目遵守,只知其然,不知其所以然;或者挑战或违反约束,持续挑战当前决策,“质疑”决策的合理性和正确性,负责人需要不间断的解释、同步、推动达成共识

    京东云开发者阅读 1k评论 1

    封面图
    【JVM】关于JVM,你需要掌握这些 | 一文彻底吃透JVM系列
    写在前面最近,一直有小伙伴让我整理下关于JVM的知识,经过十几天的收集与整理,初版算是整理出来了。希望对大家有所帮助。JDK 是什么?JDK 是用于支持 Java 程序开发的最小环境。Java 程序设计语言Java 虚拟机Ja...

    冰河阅读 652

    封面图
    带你手把手实操一个RPC框架
    首先从个人成长角度,如果一个新时代码农能清楚的了解RPC框架所具备的要素,掌握RPC框架中涉及的服务注册发现、负载均衡、序列化协议、RPC通信协议、Socket通信、异步调用、熔断降级等技术,可以全方位的提升基本...

    得物技术阅读 615评论 1

    Dubbo架构设计与源码解析(一) 架构设计
    作者:黄金一、架构演变单应用架构 ----> 垂直架构 ----> 分布式架构 ----> 微服务架构 ----> 云原生架构二、Dubbo总体架构1、角色职能• Container:服务容器 (tomcat、jetty、weblogic)• Pr...

    京东云开发者阅读 463

    封面图

    全栈开发,后端主要java,前端react、vue、mui;大数据学习中,主要致力于数仓研究和架构设计,欢迎大家...

    1 声望
    1 粉丝
    宣传栏