编程规范的意义
编程规范里很多条目都是语言、框架、库设计的问题,为什么不去修复这些 Bug,反而让开发者来遵守这些约束?
其中有一条逻辑是这样的:
在入口处保持简单性,可以让后续的流程都能保持简单。
相反,在源头引入的复杂性,会让后续的每一步都变得复杂。
今天试着串联一下,大家体会表达的意图,表述本身不太准确的地方请多担待。
从常量引出一个软件架构中的顶级原则:只读。
同级别的有高内聚低耦合,开闭原则,最小依赖。
软件栈中的只读/纵向
CPU 指令集只读,指令组合变化
硬件接口只读,模块功能变化
编程语言语法只读,源码组合变化
计算/算法/函数只读,参数变化
os 内核只读,进程变化
协议栈只读,参数 payload 变化
抽象层设计只读,实现变化
图形渲染引擎只读,渲染数据变化
浏览器引擎只读,网页变化
业务核心只读,周边服务变化
电商平台只读,买家卖家变化
需求只读,迭代变化/只能增删不能修改
只读意味着不变,但需求会变化,意味着需求中不变的部分会成为软件的核心,变化的部分是周边模块。
软件开发过程中的只读/横向
用户需求只读,产品服务变化
用户故事只读,验收测试变化
工作流程只读,交付价值变化
sprint 只读,backlog 变化
评估点数只读,迭代速度变化
单元测试只读,业务逻辑变化
输入输出只读,pipeline 变化
线索串联是开放性的,容易主观,有争议,但也容易加深理解,提高认知。
总结:常量,常量修饰,不可变变量。
总体来说是一种简化代码复杂度的方式,大多数语言都是混合支持可变量和不可变量,然后把使用的方式交给程序员。
默认不可变是个好的实践,符合开闭原则,最小依赖原则。
附:代码格式
一些敲代码过程中的洞见。
比如链式调用,写成'.xxx(yyy)'独占一行,除了美观,也方便复制粘贴;
VSCode 里强大的列编辑,也需要代码格式的支持。
在最后留个彩蛋:大家列编辑时很容易使用列粘贴,但有没有用过列拷贝呢?
版权声明: 本文为 InfoQ 作者【顿晓】的原创文章。
原文链接:【http://xie.infoq.cn/article/06b6aff925aefb277a56195c3】。文章转载请联系作者。
评论