一、单一原则

单一职责原则(SRP:Single responsibility principle)又称单一功能原则。它规定一个类应该只有一个发生变化的原因。简单地说,就是一个类只做一件事。此原则的核心就是降低耦合性和增强内聚性。

优点:
降低类的复杂性
提高可读性
提高可维护性
降低变更的风险

来源:@望月静້ᮨ໌,td社群 @王雲帆 是这样的,在开发时我们通常都应该将请求打包成独立的文件夹和文件处理,这样的优势在于,如果以后维护可以不需要去寻找每个引用的地方,如果修改内容返回值或添加接口也可以直接在文件中添加,并且归类后也可以方便开发者快速找到对应的接口类别,并且在你如果修改了请求工具的情况下,你只需要将api文件夹中的文件修改即可完成,而不是在业务逻辑中查找请求代码,能节省你开发的时间和以后维护的难度。 对此,我们应该应用 单一职责(Single Responsibility Principle)。这个原则顾名就可以思义,就是一个类应该只负责一个职责,术语叫:仅有一个引起其变化的原因。简单点说:一个类中应该是一组相关性很高的函数及数据的封装,个中含义请自行意会。看起来简单,但是做起来就难了,这可能是六大原则中最难以熟练掌握的一个原则了,它高度依赖程序员的自身素质及业务场景。 3a1c3789c7ee3d480886865f9d154c0.png 好处 1、第一个,如果你的后端是傻逼改了接口地址,你只要在上边改就行了。 2、第二个,你定义(抽象)了请求的接口和返回值,那么如果接口和返回值变了你不用改调用参数,直接改接口定义就行了。 3、第三个,如果你这个接口不要了,文件一删就结束,不用去改业务代码(摊手)。

二、里氏替换原则

里氏替换原则(Liskov Substitution Principle LSP), 任何基类可以出现的地方,子类一定可以出现。(反过来就不行了,子类出现的地方,父类未必能适应。)LSP是继承复用的基石,只有当衍生类可以替换掉基类,软件单位的功能不受到影响时,基类才能真正被复用,而衍生类也能够在基类的基础上增加新的行为。

优点:
代码共享,减少创建类的工作量,每个子类都拥有父类的方法和属性
提高代码得重用性
提高代码的可扩展性
提高产品或项目的开放性
缺点:
继承是侵入性的,只要继承,就必须拥有父类的所有属性和方法
降低代码的灵活性,子类必须拥有父类的属性和方法
增强了耦合性,当父类的常量、变量和方法被修改时,必须要考虑子类的修改,而且在缺乏规范的环境下,这种修改可能会带来非常糟糕的结果——大片的代码需要重构

三、依赖倒置原则

高层次的模块不应该依赖于低层次的模块,他们都应该依赖于抽象。
抽象不应该依赖于细节。
细节应该依赖于抽象。
简单地说就是面向接口编程、或者说面向抽象编程。抽象指的是接口或者是抽象类,特点是不可以直接被实例化。细节就是实现类、实现接口或继承抽象类而产生的类就是细节,特点是可以被直接实例化。

优点:
可扩展性好
耦合度低

  1. public interface ICar {
  2. void Run();
  3. void Turn();
  4. void Stop();
  5. }
  6. public class BmwCar:ICar
  7. {
  8. public void Run ()
  9. {
  10. Console.WriteLine("宝马开始启动了");
  11. }
  12. public void Turn ()
  13. {
  14. Console.WriteLine("宝马开始转弯了");
  15. }
  16. public void Stop ()
  17. {
  18. Console.WriteLine("宝马开始停车了");
  19. }
  20. }
  21. public class FordCar:ICar
  22. {
  23. publicvoidRun()
  24. {
  25. Console.WriteLine("福特开始启动了");
  26. }
  27. public void Turn ()
  28. {
  29. Console.WriteLine("福特开始转弯了");
  30. }
  31. public void Stop ()
  32. {
  33. Console.WriteLine("福特开始停车了");
  34. }
  35. }
  36. public class HondaCar:ICar
  37. {
  38. publicvoidRun()
  39. {
  40. Console.WriteLine("本田开始启动了");
  41. }
  42. public void Turn ()
  43. {
  44. Console.WriteLine("本田开始转弯了");
  45. }
  46. public void Stop ()
  47. {
  48. Console.WriteLine("本田开始停车了");
  49. }
  50. }
  51. public class AutoSystem {
  52. private ICar icar;
  53. //创建的时候传入对应的类就好了
  54. public AutoSystem(ICar icar) {
  55. this.icar = icar;
  56. }
  57. private void RunCar() {
  58. icar.Run();
  59. }
  60. private void TurnCar() {
  61. icar.Turn();
  62. }
  63. private void StopCar() {
  64. icar.Stop();
  65. }
  66. }

四、开闭原则

对于扩展是开放的(Open for extension)。这意味着模块的行为是可以扩展的。当应用的需求改变时,我们可以对模块进行扩展,使其具有满足那些改变的新行为。也就是说,我们可以改变模块的功能。
对于修改是关闭的(Closed for modification)。对模块行为进行扩展时,不必改动模块的源代码或者二进制代码。
实现开闭原则的关键就在于“抽象”,即面向抽象编程。

优点:
增加稳定性
可扩展性高

五、接口隔离原则

客户端不应该依赖它不需要的接口。
一个类对另一个类的依赖应该建立在最小的接口上。

简单地说,不要强迫客户使用它们不用的方法,如果强迫用户使用它们不使用的方法,那么这些客户就会面临由于这些不使用的方法的改变所带来的改变。
当一个接口太大时,我们应该将它分割成一些更细小的接口,使用该接口的客户端仅需知道与之相关的方法即可。

优点:
降低耦合性
提升代码的可读性
隐藏实现细节

六、迪米特原则

迪米特法则(Law of Demeter)又叫作最少知道原则(Least Knowledge Principle 简写LKP),就是说一个对象应当对其他对象有尽可能少的了解。简单地说,就是一个类应该对自己需要耦合或调用的类知道得最少。迪米特法也可以简单说成:talk only to your immediate friends(只与直接的朋友通信)。一个软件实体应当尽可能少的与其他实体发生相互作用。每一个软件单位对其他的单位都只有最少的知识,而且局限于那些与本单位密切相关的软件单位。

优点:
降低复杂度
降低耦合度
增加稳定性

(完)