2018-05-15 代码重构时再看设计原则

重构是个技术活,需要很资深的人士去整体架构把控技术方案和产品质量,才能使重构做的更加有效并且不会引入新的问题,但是无论我们最终采取什么手段去重构,最终我们都需要尽量符合 Solid 设计相关原则:

•   类的单一职责:体现了类只应该做一件事,良好的软件设计中系统是由一组大量的短小的类组成,以及需要他们之间功能协作完成,而不是几个上帝类。如果类的职责超过一个,这些职责之间就会产生耦合。改变一个职责,可能会影响和妨碍类为其他人服务的功能。这种类型的耦合将会导致脆弱的设计,在修改的时候可能会引入不少未知的问题。

•   开闭原则:其定义是说一个软件实体如类,模块和函数应该对扩展开放,而对修改关闭,具体来说就是你应该通过扩展来实现变化,而不是通过修改原有的代码来实现变化,该原则是面相对象设计最基本的原则。其指导思想就是(1)抽象出相对稳定的接口,这部分应该不动或者很少改动;(2)封装变化;不过在软件开发过程中,要一开始就完全按照开闭原则来可能比较困难,更多的情况是在不断的迭代重构过程中去改进,在可预见的变化范围内去做设计。

•   里氏替换原则:子类可以扩展父类的功能,但不能改变父类原有的功能。简单来说,所有使用基类代码的地方,如果换成子类对象的时候还能够正常运行,则满足这个原则,否则就是继承关系有问题,应该废除两者的继承关系,这个原则可以用来判断我们的对象继承关系是否合理。通常在设计的时候,我们都会优先采用组合而不是继承,因为继承虽然减少了代码,提高了代码的重用性,但是父类跟子类会有很强的耦合性,破坏了封装。

•   接口隔离原则:不能强迫用户去依赖那些他们不使用的接口。简单来说就是客户端需要什么接口,就提供给它什么样的接口,其它多余的接口就不要提供,不要让接口变得臃肿,否则当对象一个没有使用的方法被改变了,这个对象也将会受到影响。接口的设计应该遵循最小接口原则,其实这也是高内聚的一种表现,换句话说,使用多个功能单一、高内聚的接口总比使用一个庞大的接口要好。

•   依赖倒置(DIP):高层模块不应该依赖低层模块,两者都应该依赖其抽象;抽象不应该依赖细节;细节应该依赖抽象。其实这就是我们经常说的“针对接口编程”,这里的接口就是抽象,我们应该依赖接口,而不是依赖具体的实现来编程。DIP 描述组件之间高层组件不应该依赖于底层组件。依赖倒置是指实现和接口倒置,采用自顶向下的方式关注所需的底层组件接口,而不是其实现。DI 模式很好例子的就是应用 IOC(控制反转)框架,构造方式分为分构造注入,函数注入,属性注入 。
        当我们在做重构优化的时候应该充分考虑上面这几个原则,一开始可能设计并不完美,不过可以在重构的过程中不断完善。但其实很多人都跳过了设计这个环节,拿到一个模块直接动手编写代码,更不用说去思考设计了,项目中也有很多这样的例子。当然对于简单的模块或许不用什么设计,不过假如模块相对复杂的话,能够在动手写代码之前好好设计思考一下,养成这个习惯,肯定会对编写出可读性、稳定性、健壮性、灵活性、可服用性、可扩展性较高的代码有帮助

你可能感兴趣的:(2018-05-15 代码重构时再看设计原则)