架构整洁之道笔记1

随着软件周期的推移,软件修改要付出的代价会越来越大。软件架构的目标是希望以最少的人力满足构建和维护该系统的需求,延缓软件腐化的趋势。

关于对架构的误解澄清:高层的架构并不能脱离细节实现的设计。高层架构和低层设计不分你我。

从两个价值维度描述软件价值:

  • 系统的行为。体现为程序员赶功能交付。
  • 架构灵活性。体现为程序员重构或寻找优秀的设计。

对于这两个永恒的矛盾,程序员应当能够对任务做规划:重要又紧急,重要但不紧急,不重要但紧急,不重要也不紧急。架构往往就是重要但不紧急的事情,程序员如果具备足够的架构自信,应当为架构做抗争,比如说服权力争取时间做架构和重构,争取不到至少也可以尝试调整需求的上线顺序。这种抗争在公司中是永无止境的。

结构化编程

结构化编程对程序控制权的直接转移进行了限制和规范。

Dijkstra于1968年提出结构化编程,他认为goto这种无限制跳转的语句会损害程序整体结构。推荐使用if/then/else/do/while/until语句。

为什么说goto是有害的?Dijkstra认为可以借鉴数学推导的方法去证明程序的正确性,程序员可以用一些以证明可用的程序结构串联起来,证明额外的程序是正确的,进而就可以推导出整个程序的正确性。但是goto语句的存在就会导致模块无法被拆分成为更小的、可证明的单元。

目前采用的是科学证明法。科学理论的特点就是,可以被证伪,但无法被证实。现在我们用大量的测试用例去排查bug,如果找不到bug,那么我们的程序可以看作是正确的。

面向对象编程

面向对象编程对程序控制权的间接转移进行了限制和规范。

封装,就是把数据和函数圈起来,对外暴露必要的方法,而数据不可见。

继承,把子类伪装成父类的衍生体,实际上没有做出什么程序的新改造,但是提供了数据结构的伪装性和遍历性。

多态,实际上是对函数指针的运用。多态将原来顺序执行且顺序依赖的程序做出了调整,将其依赖反转(依赖关系与控制流的反转)。程序运行时调用的某接口是虚的,真正调用的接口不受控制流影响,可以独立变化。这样程序就可以做到业务代码与数据库、用户界面的解耦。非常有帮助!

函数式编程

函数式编程对程序中的赋值进行了限制和规范。

函数式编程语言中的变量是不可变的,变量不可变,就不会出现死锁、竞争、并发问题。更适合用于系统中的不可变组件。

posted @   lcz111  阅读(8)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· 葡萄城 AI 搜索升级:DeepSeek 加持,客户体验更智能
· 什么是nginx的强缓存和协商缓存
· 一文读懂知识蒸馏
点击右上角即可分享
微信分享提示