代码重构异曲同工的类(alternative classes with different interfaces)

网友投稿 944 2022-05-30

什么是异曲同工的类(alternative classes with different interfaces)

定义: 异曲同工的类——两个类功能一致,却有不同的定义(方法/接口)

影响: 相关的业务逻辑可能会重复实现,或分布到不同类中,代码难维护

改进目标: 统一接口、相同的功能只实现一份

方法: 函数改名、搬移函数、添加参数、函数参数化、提炼超类、移除子类

注:

狭义的异曲同工:两个类功能完全相同;

广义的异曲同工:两个类有很多相同的功能,从抽象角度看它们也有高一致性,却没有共同的基类/接口。

案例1

代码背景

有个制造工厂(ManufactureService);

它雇用了雇员(Employee)把原料(Material)加工成产品(Product);

它也雇用了工人(Worker)把原料(Material)加工成产品(Product);

其实,雇员(Employee)和工人(Worker)逻辑上等价

代码重构:异曲同工的类(alternative classes with different interfaces)

症状/问题

“异曲同工的类”让人困惑。从局部看,它们有着不同的函数接口;从整体看,它们像是同样的东西。分别看Employee和Worker的函数:

•ID:identity vs id;

•性别:booleanvs Sex枚举;

•某方法:setValuesvs setProperties;

•加工产品的方法:ManufactureService.createProductUsingEmployee() vs Worker.produce()

案例1的改进目标

改进目标

相同的类只留一个(本例中留Worker);

改进步骤

统一Employee和Worker的函数签名(含:函数名、参数列表、返回值、异常申明),使两个类等价;

查漏补缺类功能(如:Employee中不含加工产品的函数)

把Employee全部用Worker替代

删除Employee类

案例2

代码背景

有个销售管理系统,其中有:

报价单Quotation,含:序列号、买家、创建时间、报价明细、报价有效期、并能转化为订单、重新报价……;

销售订单SalesOrder,含:序列号、买家、创建时间、价格明细、收货地址、支付信息、并能创建出库单……;

症状/问题

Quotation和SalesOrder共享了一些功能,但没有共同的基类/接口:

相同点:序列号、买家、创建时间、价格明细……

差异点:

•Quotation:报价有效期、转化为订单、重新报价……

•SalesOrder:收货地址、支付信息、创建出库单……

逻辑重复、代码重复

案例2的改进目标

改进目标

消除重复、消除混淆;

重构对比(案例1)

重构对比(案例2)

总结

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:Google Earth Engine ——非洲土壤蒸发和截流(ETIa)数据集
下一篇:SAP 云平台上的 ABAP 编程环境试用版
相关文章