读C#代码整洁之道笔记01_C#的编码标准和原则

  1. 编码原则
    1. SOLID原则
      1. 单一职责原则(Single Respon-sibility Principle)
        1. 类和方法应当仅具备单一职责。所有组合为单一职责的元素应当组合在一起并进行封装。
      2. 开闭原则(Open-Closed Principle)
        1. 类和方法应当对扩展开放,对修改封闭。
      3. 里氏替换原则(Liskov Substitution)
        1. 若函数接收一个基类的指针,那么该指针应当可以替换为任何从基类派生的类(的指针)而无须事先知晓具体类信息。
      4. 接口隔离原则(Interface Segregation Principle)
        1. 与其设计一个大而全的接口不如拆分为若干小型接口,而类可以选择实现需要的接口中的方法。
      5. 依赖倒置原则(Dependency Inversion Principle)
        1. 高层次的模块不应当依赖低层次的模块。
        2. 低层次的模块的替换不应当影响高层次模块的使用。
        3. 不论是高层次的模块还是低层次的模块都应当依赖于抽象。
        4. 抽象不应当依赖于细节,但是细节应当依赖于抽象。
    2. YAGNI原则
      1. “你不会需要它”(You Ain't Gonna Need It)
      2. 确保类、方法和整体代码行数保持绝对最小水平。
    3. KISS原则
      1. “保持软件简单易懂”(Keep It Simple,Stupid)
      2. 务必要保持代码整洁易读,确保即使是新手程序员也能够理解其含义。
    4. DRY原则
      1. “避免重复的代码”(Don't Repeat Yourself)
      2. 当遇到重复代码时应当尽早将其移除
    5. 奥卡姆剃刀法则
      1. Occam's Razor, Ockham's Razor
      2. “如无必要,勿增实体”,即“简单有效原理”。
        1. 最简单的方案也最可能是正确的那个方案
        2. 假设越多,设计方案包含缺陷的可能性就越大
        3. 项目的构成组件越少,出问题的可能性就越少
  2. 编码方法
    1. 测试驱动开发(Test-Driven Development,TDD)
    2. 行为驱动开发(Behavioral-Driven Development,BDD)
      1. SpecFlow
    3. 面向方面编程(Aspect-Oriented Programming,AOP)
      1. PostSharp
  3. 良好代码
    1. 合理的缩进
      1. 工具实现
    2. 有意义的注释
    3. API文档注释
      1. 文档越易用,开发人员使用API的意愿就越强
    4. 使用命名空间合理组织代码
      1. 使用命名空间合理组织代码
    5. 合理的命名规则
      1. Pascal命名法
        1. 命名空间、类、接口、枚举和方法
      2. 驼峰命名法
        1. 变量名称、参数名称
      3. 在成员变量上必须加上前缀下划线
    6. 一个类执行一种任务
    7. 一个方法做一件事情
    8. 方法的代码少于10行,最好不超过4行
      1. 代码格式化、链式函数算1行?
    9. 方法的参数不多于两个
      1. 方法最好没有参数
      2. 有两个以上的参数时就需要考虑类和方法的职责是不是太多了
      3. 方法的确需要两个以上的参数,那么最好将其合并为一个对象参数
    10. 合理使用异常
    11. 代码可读性强
    12. 代码耦合程度低
    13. 高内聚的代码
      1. 将公共的功能正确地分组的代码具有高度的内聚性
    14. 对象会被恰当销毁
      1. 请务必调用Dispose()方法明确地销毁使用中的资源
      2. 将对象(引用)设置为null以使其超出作用范围
      3. using语句
    15. 避免使用Finalize()方法
      1. 最好在更加可靠的Dispose()方法中来销毁非托管资源
    16. 合理地进行抽象
      1. 当设计只向更高的级别开放,并仅开放必需的内容时,它就处在正确的抽象层次上
    17. 在大型类中使用#region进行区域划分

你可能感兴趣的:(读C#代码整洁之道,c#)