GO面向对象(做CRUD专家)四 :案例中的设计原则

1,116 阅读3分钟

开放封闭原则

对扩展开放,对修改封闭
当系统需求发生改变时,尽量不修改系统原有代码,应该以模块扩展方式,来实现新的需求。

开闭原则是面向对象设计中"可复用设计"的基石,是面向对象设计中最重要的原则之一,其它很多的设计原则都是实现开闭原则的一种手段。开闭原则是说软件实体(类、模块、函数等)应该可以扩展,但是不可以修改。开闭原则的意思就是说,在设计软件的时间要时刻考虑,尽量让这个类是足够好的,写好了就不要去修改,如果新需求来,通过增加类来实现新需求的功能,原来的代码能不动就不动。也就是说,面对新需求,对程序的改动是通过增加新代码进行的,而不是更改现有的代码,这就是开闭原则的精髓所在。

优点:
1、提高系统的稳定性和可维护性。不修改原有代码有助于系统稳定性,以扩展的方式开发新功能有助于快速开发。
2、提高软件测试的友好性。以拓展的方式开发功能,不会影响原有功能,有利于加快测试进度。

面向过程:
新增商品类型需要在老代码PriceCalculate方法中修改,这就违反了开放封闭原则;

面向对象:
新增商品类型,通过增加新类的方式来扩展新功能需求,老代码不需要变动,遵循了开放封闭原则;

单一职责原则

一个类应该只有一个发生变化的原因
一个类应该用于只完成一类事情,类方法只完成一件事情。

这个原则不仅仅是用针对一个类进行描述,模块、函数都应该尽量取遵循单一职责原则。

单一职责原则是最基础,最简单,却也是最难把握的一个原则,如何判断职责是否足够单一,没有一个准确的衡量标准,在日常开发中,如果遇到修改了一个问题经常会引起另一个问题。其原因大多都是因为在设计上违背了单一职责原则。

优点:
1、降低类的复杂度,有利于代码复用和单元测试;
2、更小粒度的类提高了可读性;
3、降低变更引起的风险;

违反单一职责原则的代码表现:
1、方法有太多参数
2、方法中代码缩进超过3层
3、类或者类方法太长,函数设计的大而全,类内的方法多而杂
4、类有太多依赖

面向过程:
PriceCalculate方法包含了所有商品类型的价格计算逻辑,完成的不是一件事情,完成的是一类事情,任意某个商品类型的计算逻辑的变动都需要修改这个方法,这就违反了单一职责原则;

面向对象:
每种商品实现类对应各自的PriceCalculate方法,价格逻辑变动只需要修改相应的类实现方法,做到了方法层级的单一职责;