我们一起来读书吧 关注:140贴子:2,117
  • 1回复贴,共1

《架构整洁之道》第1-6章

只看楼主收藏回复

物理建筑的结构一目了然,但软件项目没有定律可循。
有效分离(系统、程序)控制和(业务)逻辑,会让系统得到最大的简化。
第一部分
如果系统的每次发布,都会提升下一次变更的成本,那么这个设计就是不好的。
大家常用一句话来欺骗自己:“我们可以以后再重构代码,产品上线最重要!”但是结果大家都知道,产品上线以后重构工作就再没人提起了。开发的压力永远也不会消退,产品后面有无数的竞争对手追赶,必须要比他们跑得更快才能保持领先。
软件系统的行为是其最直观的价值维度:程序员的工作就是让机器按照某种指定方式运转。
软件系统的第二个价值维度是架构价值。软件系统必须保持灵活,好的系统架构设计应该尽可能做到与”形状“无关。


IP属地:北京1楼2022-11-21 12:30回复
    第二部分
    三种编程范式都从给某一方面限制和规范了程序员的能力,告诉我们不能做什么(goto语句,函数指针、赋值语句),而不是可以做什么:
    结构化编程 对程序控制权的直接转移进行了限制和规范。
    面向对象编程对程序控制权的间接转移进行了限制和规范。
    函数式编程 对程序中的复制进行了限制和规范。
    结构化编程:
    未了减少程序中的错误,Dijkstra企图形成一种欧几里得结构,即可以用代码将一些已经证明可用的结构串联起来,这样可以推导出整个程序的正确性。
    goto语句的某些用法会导致某个模块无法被递归拆分为更小的、可证明的单元;这会导致无法采用分解法将大型问题进一步拆分成更小的、可证明的部分。
    有人证明了,人们可以用顺序、分支、循环三种结构构造出任何程序。
    数学是证明可证明的结论,科学研究是要将可证明的结论证伪。
    我们无法通过证伪来证明程序的正确性,即”测试只能展示bug的存在,不能证明不存在bug“
    面向对象编程:
    封装、继承、多态并不是面向对象编程的专属特性。
    实际上C++和Java、C#等都削弱了封装性;继承可以借由结构体实现;而多态其实不过是函数指针的一种应用,但函数指针很危险。
    想想UNIX系统的STDIN等定义,write等标注函数:源代码级别的依赖关系,都可以将其反转!
    面向对象编程就是以多态为手段,对源代码中的依赖关系进行控制的能力!这种能力让软件架构师可以构建出某种插件式架构,让高层策略性组件与底层实现性组件(可以被编译成插件)相分离,实现独立于高层组件的开发和部署。
    函数式编程:
    一切并发应用遇到的问题, 一切由于使用多线程、多处理器而引起的问题,如果没有可变变量的话都不可能发生。
    想想Git系统;参考思想:应该将状态修改的部分和不需要修改状态的部分隔离成单独的组件,然后用合适的机制来保护可变量。


    IP属地:北京2楼2022-11-21 12:32
    回复