SOLID (面向对象设计)

旨在让软件设计易于理解\灵活\可维护性

// 面向对象编程的封装让程序可复用, 但依然会难维护, 还是需要准则来生产易维护的程序

S Single responsibility principle 单一功能原则
	只有一个责任
	只负责一个功能
	有更新有变动时只修改一处地方
	该原则同样适用于组件及微服务
O Open–closed principle 开闭原则
	可以扩展, 但是不能修改
	extension, no modification
	避免新增影响旧代码的运行
	避免写死, 每次扩展都要修改旧代码(想象你修改代码时, 要把所有依赖包都改一遍, 是多么可怕)
	想要实现随意扩展, 就得应用单一功能原则
L Liskov substitution principle 里氏替换原则
	认为“程序中的对象应该是可以在不改变程序正确性的前提下被它的子类所替换的”的概念。
	参考契约式设计。
	对象被子对象替换不会导致程序出错的原则
	“里氏”指的是芭芭拉·利斯科夫(Barbara Liskov,1939年-)
		领导了第一个支持数据抽象的面向对象编程语言的CLU的设计与实现(1970年代)
	子类必须包含父类的所有
	父类的引用, 子类的实现, 不会出问题
		Animal animal = new cat(); animal.sound(); 
			// 喵(动物都有声音, 所以猫也一定实现了声音)
			// 父类中有的, 放心的用的原则
I Interface segregation principle 接口隔离原则
	认为“多个特定客户端接口要好于一个宽泛用途的接口”的概念。
	接口中存在了用不到的方法, 那么接口应该拆分
	实现接口时, 强迫实现了一个根本不用的方法, 这种时候, 接口需要拆分
D Dependency inversion principle 依赖反转原则
	认为一个方法应该遵从“依赖于抽象而不是一个实例”的概念。
	依赖注入是该原则的一种实现方式。
	上面的不应该依赖下面的, 只应该反过来下面的依赖上面的

// 叫开发原则或设计原则, 也可以叫重构迭代原则吧, 应用这些, 多是在实现了功能后的重构迭代阶段.

KISS

Keep It Simple & Stupid

人类容易理解的才是优秀的

YAGNI

You Aren’t Gonna Need It

满足的是现在的需求而不是未来可能的需求

没有不要就不添加