架构整洁之道笔记1
随着软件周期的推移,软件修改要付出的代价会越来越大。软件架构的目标是希望以最少的人力满足构建和维护该系统的需求,延缓软件腐化的趋势。
关于对架构的误解澄清:高层的架构并不能脱离细节实现的设计。高层架构和低层设计不分你我。
从两个价值维度描述软件价值:
- 系统的行为。体现为程序员赶功能交付。
- 架构灵活性。体现为程序员重构或寻找优秀的设计。
对于这两个永恒的矛盾,程序员应当能够对任务做规划:重要又紧急,重要但不紧急,不重要但紧急,不重要也不紧急。架构往往就是重要但不紧急的事情,程序员如果具备足够的架构自信,应当为架构做抗争,比如说服权力争取时间做架构和重构,争取不到至少也可以尝试调整需求的上线顺序。这种抗争在公司中是永无止境的。
结构化编程
结构化编程对程序控制权的直接转移进行了限制和规范。
Dijkstra于1968年提出结构化编程,他认为goto这种无限制跳转的语句会损害程序整体结构。推荐使用if/then/else/do/while/until语句。
为什么说goto是有害的?Dijkstra认为可以借鉴数学推导的方法去证明程序的正确性,程序员可以用一些以证明可用的程序结构串联起来,证明额外的程序是正确的,进而就可以推导出整个程序的正确性。但是goto语句的存在就会导致模块无法被拆分成为更小的、可证明的单元。
目前采用的是科学证明法。科学理论的特点就是,可以被证伪,但无法被证实。现在我们用大量的测试用例去排查bug,如果找不到bug,那么我们的程序可以看作是正确的。
面向对象编程
面向对象编程对程序控制权的间接转移进行了限制和规范。
封装,就是把数据和函数圈起来,对外暴露必要的方法,而数据不可见。
继承,把子类伪装成父类的衍生体,实际上没有做出什么程序的新改造,但是提供了数据结构的伪装性和遍历性。
多态,实际上是对函数指针的运用。多态将原来顺序执行且顺序依赖的程序做出了调整,将其依赖反转(依赖关系与控制流的反转)。程序运行时调用的某接口是虚的,真正调用的接口不受控制流影响,可以独立变化。这样程序就可以做到业务代码与数据库、用户界面的解耦。非常有帮助!
函数式编程
函数式编程对程序中的赋值进行了限制和规范。
函数式编程语言中的变量是不可变的,变量不可变,就不会出现死锁、竞争、并发问题。更适合用于系统中的不可变组件。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· 葡萄城 AI 搜索升级:DeepSeek 加持,客户体验更智能
· 什么是nginx的强缓存和协商缓存
· 一文读懂知识蒸馏