做网站的公司怎么推销,郑州建设网,重庆网站建设多少钱,网站开发项目方案云原生学习路线导航页#xff08;持续更新中#xff09; 本文是 golang语言系列 文章#xff0c;主要对编程通用技能 SOLID、YAGNI、KISS等设计原则 进行学习 1.SOLID设计原则
S#xff1a;SRP#xff0c;单一职责原则O#xff1a;OCP#xff0c;开闭原则L#xff1a;…云原生学习路线导航页持续更新中 本文是 golang语言系列 文章主要对编程通用技能 SOLID、YAGNI、KISS等设计原则 进行学习 1.SOLID设计原则
SSRP单一职责原则OOCP开闭原则LLSP里氏替换原则IISP接口隔离原则DDIP依赖倒转原则
1.1.SRP单一职责原则Single Responsibility Principle
原则思想一个方法或一个类只负责一件事情。描述单一职责原则很简单一个方法 一个类只负责一个职责各个职责的程序改动不影响其它程序。优点降低类和类的耦合提高可读性增加可维护性和可拓展性降低可变性的风险。如何判断一个类是否符合单一职责原则可以从下面一些方面入手 类中的代码行数函数或者属性过多类依赖的其他类过多或者依赖类的其他类过多私有方法过多比较难给一个类起一个合适的名字起的名字比较笼统例如manger类context类类中大量的方法都是集中操作某一些属性 当然类的职责也不是设计的越单一越好如果拆分的过细的话实际上会降低内聚性也会影响代码的可维护性
1.2.OCP开闭原则Open Closed Principle
原则思想开闭指的是 对外开放修改关闭尽量通过扩展软件实体来解决需求变化而不是通过修改已有的代码来完成变化描述一个软件产品在生命周期内都会发生变化既然变化是一个既定的事实我们就应该在设计的时候尽量适应这些变化以提高项目的稳定性和灵活性。 开闭原则并非是说完全杜绝修改而是以最小的修改来完成新功能的开发最常用来提高代码扩展性的方法有多态、依赖注入、基于接口而非实现编程以及大部分的设计模式比如装饰、策略、模板、职责链、状态
1.3.LSP里氏替换原则Liskov Substitution Principle
原则思想使用的基类可以在任何地方使用继承的子类完美的替换基类。大概意思是子类可以扩展父类的功能但不能改变父类原有的功能。子类可以实现父类的抽象方法但不能覆盖父类的非抽象方法子类中可以增加自己特有的方法。优点增加程序的健壮性即使增加了子类原有的子类还可以继续运行互不影响里氏替换原则与多态的区别 虽然定义描述和代码实现有点类似但是他们的关注点是不一样的多态是面向对象的一大特性它是一种代码实现的思路。而里式替换是一种设计原则指导继承关系中子类该如何设计
1.4.ISP接口隔离原则Interface Segregation Principle
原则思想使用多个隔离的接口比使用单个接口要好。本质上还是 降低类之间的耦合度 的意思 从这儿我们看出其实设计模式就是一个软件的设计思想从大型软件架构出发为了升级和维护方便。所以各种原则中多次出现降低依赖降低耦合。例如支付类的接口和订单类的接口需要把这俩个类别的接口变成俩个隔离的接口
1.5.DIP依赖倒转原则Dependency Inversion Principle
原则思想尽量面向接口编程在 传递参数 或 关联关系 中尽量引用层次更高的抽象层类而不是某一个具体实现这个是开放封闭原则的基础具体内容是对接口编程依赖于抽象而不依赖于具体。
2.YAGNI原则
YAGNIYou Aint’t Gonna Need It即你不需要的YAGNI原则就是说不要设计与开发当前功能用不到的代码但并不意味着不考虑拓展性可以预留好拓展点后面需要时再开发。举例目前项目只对国内市场未来将会面向国内海外同时使用。所以在开发中不需要提前编写海外部分代码但是在国内海外有差异的逻辑上要预留好拓展点方便后面对海外逻辑进行补充。
3.KISS原则
Keep It Simple And Stupid保持简单原则KISS原则就是说尽量保证代码简洁使用通用技术(大家都用的技术不要选择偏难怪的技术)、不重复造轮子、不过度优化。
举例对于某个数值的提取或者匹配判断使用正则表达式可以使代码行数更少看似更简单但其实并不是所有同事都熟悉正则表达式而且在编写正则规则时易出现bug所以可以采用通用技术来实现。
4.LOD原则
LODLaw of Demeter迪米特法则也叫做最少知道原则原则思想一个对象应当对其他对象有尽可能少地了解简称类间解耦大概意思就是一个类尽量减少自己对其他对象的依赖原则是低耦合高内聚只有使各个模块之间的耦合尽量的低才能提高代码的复用率。优点低耦合高内聚。
参考文章
设计模式–SOLID四大原则KISS和YAGNI笔记【设计模式】设计原则-SOLID、DRY、KISS、YAGNI、LOD