设计原则

  • KISS【keep it simple, stupid】
1)方便用户使用,最简化操作步骤
2)代码逻辑保持简单,容易修改和维护,已经不能再删除多余代码才是最极致的精简
3)系统设计保持简单
  • YAGNI【You’re NOT gonna need it!】
某一功能只有当你真正需要实现的时候,才去实现它。
  • Do The Simplest Thing That Could Possibly Work
做最简单可行的事情,只关注问题的本身
  • Separation of Concerns【分离关注点】
1)简化软件应用程序的开发和维护
2)分离的关注点可以重用、独立的开发和更新
3)将程序功能分解为尽可能少重叠的独立模块
  • DRY【don't repeat yourself】
1)程序中的每一个重要功能都应该在源代码中的一个地方实现
2)将功能类似的函数抽象出来,固定不可变的部分、封装可变的部分【行为参数化】
3)类似而重复的代码会导致系统混乱、不可重构、维护困难  
  • Code For The Maintainer【为维护人员编写代码】
1)Don't make me think.
2)逻辑清晰、注释完整
  • Avoid Premature Optimization【避免过早优化】
1)过早优化是万恶之源
2)在发现瓶颈、整体分析之后才去优化它
  • Minimise Coupling【低耦合】
1)耦合度高时一个模块的变化,通常会对其他模块产生连锁反应
2)隐藏实现细节,以减少类间耦合
3)剔除所有无关的代码
  • Composition Over Inheritance【组合优于继承】
1)组合相比继承而言,类间耦合度更低。
2)当类间存在 has a 的关系时使用组合,当类间存在 is a 的关系时使用继承。
  • Orthogonality【正交】
概念上不相关的东西,不能在系统内部出现关联。
  • Robustness Principle【鲁棒性原则】
1)向其他系统发送的消息必须符合规范。
2)接收输入的代码除了能够接收规范的消息外,也能应对非法输入。
  • Maximise Cohesion【高内聚】
1)将功能相关的函数组织在同一个类中
  • Hide Implementation Details【隐藏实现细节】
1)面向接口编程,通过接口来隐藏实现细节
2)最小化类中成员的可访问性
3)不要公开数据成员
4)避免将私有实现细节放入接口中
  • Encapsulate What Changes【封装可变的部分】
1)将最可能变化的部分封装在 API 中
2)将不同的概念分离到自己的模块中
  • Boy-Scout Rule【童子军规则】
1)对于每次提交,确保它不会降低代码库的质量。
2)任何时候,只要看到可重构的代码,立即重构它。
  • Command Query Separation【命令查询分离】
1)每个方法,要么执行更新,要么执行查询,不能两种行为都出现。
2)将每个方法实现为命令或查询,将命名约定应用于方法名称。
原文地址:https://www.cnblogs.com/zhuxudong/p/10176448.html