经典编码概念
持续更新中…
-
TDD & 面向 Debug 编程,TDD 是为了尽早暴露问题;防御性编程,编码过程要尽量细致,基本原则是不相信任何人、任何依赖代码;面向 Debug 编程是为了未来出现问题好排查
- 不好测试的代码要么是设计有问题,要么就是特殊场景,一般都是设计问题
- 防御性编程常规观点,我的理解是依赖倒置,不可控的代码要封装一层,防止被其他模块牵着鼻子走
- 面向 Debug 编程就是提供良好的 Debug 工具,常规 RPC 工具常内置小型 http 服务,可以很方便的通过控制台直接访问
-
好代码的检验标准就是人们是否能轻而易举地修改它
-
与其猜测未来需要哪些灵活性、需要什么机制来提供灵活性,我更愿意只根据当前的需求来构造软件,同时把软件的设计质量做得很高
-
每当感觉需要以注释来说明点什么的时候,我们就把需要说明的东西写进一个独立函数中
代码质量的重要性
代码的生命周期中有不少与一半的时间都用于阅读,代码的可阅读性(质量)很重要
经典概念
- SOLID:Single Responsibility / Open&Closed / Liskov Substitution / Interface Segregation / Dependency Inversion
- CLEAN:内聚(Cohesive)/松耦合(Loosely Coupled)/封装(Encapsulated)/自包含(Assertive)/无冗余(Nonredundant)
- YAGNI:YAGNI 有很强的扩展性,比如只做好当前、不重复、尽量不添加新功能
- 3Y:层次化( hierarchy)/ 模块化( modularity) / 规整化( regularity,保存模块接口的通用性)
- 测试驱动开发。逻辑测试 & 边界测试。函数或模块的编写要方便测试,而且每当你收到 bug 报告,请先写一个单元测试来暴露这个 bug
其他资料:https://users.ece.utexas.edu/~adnan/pike.html
重构
下面的内容截取自 《重构:改善既有代码的设计》 /
重构:在不改变代码外在行为的前提下,对代码做出修改,以改进程序的内部结构
在软件开发的大部分历史时期,大部分人相信应该先设计而后编码。重构正好与此相反,哪怕手上有一个糟糕的设计,甚至是一堆混乱的代码,我们也可以借由重构将它加工成设计良好的代码
重构原则
- 重构的第一步:确保即将修改的代码拥有一组可靠的测试(TDD),合理的测试可以极大的减少调试时间
- 两顶帽子。将重构与添加新功能在版本控制的提交中分开
- 何时重构。让扩展变得容易、事不过三,拒绝重复、帮助理解、逐步清理不合理的地方
- YANGNI。不需要理解的代码不要重构
- 自动化重构。使用智能工具可以减少工作量
CR CheckList
参考:https://github.com/mgreiler/code-review-checklist
Type | Items | Type | Items |
---|---|---|---|
Requirements | Have the requirements been met? Have stakeholder(s) approved the change? |
Code Formatting | Is the code formatted correctly? Unecessary whitespace removed? |
Best Practices | Follow Single Responsibility principle? Are different errors handled correctly? Are errors and warnings logged? Magic values avoided? No unnecessary comments? Minimal nesting used? |
Maintainability | Is the code easy to read? Is the code not repeated (DRY Principle)? Is the code method/class not too long? |
Performance | Is the code performance acceptable? | Architecture | Is it secure/free from risk? Are separations of concerned followed? Relevant Parameters are configurable? Feature switched if necessary? |
Testing | Do unit tests pass? Do manual test plans pass? Has been peer review tested? Have edge cases been tested? Are invalid inputs validated? Are inputs sanitised? |
Documentation | Is there sufficient documentation? Is the ReadMe.md file up to date? |
Other | Has the release been annotated (GA etc)? |
资料
相关书籍
软件构建组成
细节请参考《代码大全》