A Philosophy of SoftwareDesign
2022-04-05 本文已影响0人
SailCoding
A Philosophy of SoftwareDesign
复杂的本质
如何避免复杂
- 仅仅可工作的代码还远远不够
1.1 战术编程
1.2 战略编程 - 模块要有深度
2.1 具有通用功能的模块更具深度 - 不同的层,不同的抽象
- 复杂性下移
- 合并还是分离
- 确保错误终结
- 设计两次:peter原理
为什么要写注释
困扰程序员的两大世界性难题:
- 别人的代码没有注释
- 别人让我给我的代码写注释
注释应当用于描述代码中不易理解的部分
选择命名
给变量,类,模块,文件起名字很难,真的很难。好的命名能使得软件设计更容易理解,差的命名更容易产生Bug。
注释先行
修改现有代码
一致性
一致性在软件设计里很重要,包括:
- 命名
- 代码风格
- 接口
- 设计模式
- 常量
可以使用以下的方法来保证一致性:
- 文档
- 利用工具/代码审查来强制
- 入乡随俗
- 不要随便改变命名约定
代码应当显而易见
软件开发的趋势
John对软件开发重的一些趋势和问题做了总结:
- 面向对象,对于继承,基于接口的继承要优于基于实现的继承
- 敏捷,敏捷的一个潜在问题是导致“战术性编程”为主导,导致系统的复杂性增加
- 单元测试
- 测试驱动,测试驱动的问题是关注功能,而非找到最佳设计
- 设计模式,设计模式的问题可能导致过度应用
- Getter/Seeting, 这个模式可能是冗余的,也许不如直接暴露成员更简单