使用面向对象重构之-把抽象控制在一处:提高内聚性

来源:互联网 发布:婚礼现场互动软件 编辑:程序博客网 时间:2024/06/05 23:05
承接上文 使用面向对象重构之-使用接口抽象完成不同维度的扩展。
本文所介绍的内容可能不是面向对象编程所特有的,在其他编程(函数式或过程式)中也会常用的技巧——使用统一的抽象。上文遗留的问题就是,太多类型的Staff要创建:
public class StaffBase{...}public class LocalStaff :StaffBase{public Staff(ITransportClaim transportClaimProvider){...}}public class OTStaff: LocalStaff{public class OTStaff(ITransportClaim transportClaimProvider, IOverTimeFoodClaim otClaimProvider): base(transportClaimProvider){...}}public class TravelStaff :StaffBase{public class TravelStaff(ITravelClaim travelClaimProvider){}}




问题来了,哪个类要做这件事情?如果没有类来做这件事情的话,将会所有调用者的责任,即创建对象的代码(new XXStaff())将会到处都是。这看起来并不是我们想要的。一种普遍的方案就是使用工厂模式来统一管理对象的创建。
...public interface IStaffFactory<T> where T: StaffBase{T CreateStaff();}public class StaffFactory: IStaffFactory<LocalStaff>{public LocalStaff CreateStaff();}public class TravelStaff: IStaffFactory<TravelStaff>{public TravelStaff CreateStaff();}...




本文只是以对象的创建为例,来说明一个重要的原则:信息的统一管理,即确保每件事只在一个地方做,可以是行为或是数据。DRY和information expert原则其实是相辅相成的,当代码重复时,就意味要创建抽象来集中管理某信息;当代码缺乏集中信息管理时,就难免出现重复(调用)。
1 0
原创粉丝点击