简化数据处理,掌握Excel去除空格的高效技巧
994
2022-05-30
什么是异曲同工的类(alternative classes with different interfaces)
定义: 异曲同工的类——两个类功能一致,却有不同的定义(方法/接口)
影响: 相关的业务逻辑可能会重复实现,或分布到不同类中,代码难维护
改进目标: 统一接口、相同的功能只实现一份
方法: 函数改名、搬移函数、添加参数、函数参数化、提炼超类、移除子类
注:
狭义的异曲同工:两个类功能完全相同;
广义的异曲同工:两个类有很多相同的功能,从抽象角度看它们也有高一致性,却没有共同的基类/接口。
案例1
代码背景
有个制造工厂(ManufactureService);
它雇用了雇员(Employee)把原料(Material)加工成产品(Product);
它也雇用了工人(Worker)把原料(Material)加工成产品(Product);
其实,雇员(Employee)和工人(Worker)逻辑上等价
症状/问题
“异曲同工的类”让人困惑。从局部看,它们有着不同的函数接口;从整体看,它们像是同样的东西。分别看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小时内删除侵权内容。