如何封装Year、Month字段?200个类的继承架构优化问询
类结构优化方案咨询
现状描述
我现有约200个类,其中5%为独立类,95%的类包含以下属性:
int CantonID int EntityID int MunicipalityID // other fields
在这95%的类中,约70%还额外包含时间属性:
int CantonID int EntityID int MunicipalityID int Year int Month //other fields
剩余30%的类则没有Year和Month属性。
我的初步思路与困惑
我想咨询最优解决方案,目前的初步思路是:
- 5%的独立类保持独立
- 其余95%的类继承包含基础位置属性的基类:
int CantonID int EntityID int MunicipalityID
但不确定该如何封装Year和Month字段:如果直接加到基类里,会导致30%的类继承不必要的属性;之前了解过建造者设计模式,但不确定是否适用于这个场景。
推荐解决方案
1. 分层继承(最直接的复用方案)
构建两层基类结构,精准匹配不同类的属性需求:
- BaseLocation:仅包含
CantonID、EntityID、MunicipalityID,让那30%不需要时间属性的类继承 - BaseTimedLocation:继承自
BaseLocation,额外添加Year和Month属性,供70%需要时间属性的类继承
这种方式完全避免了属性冗余,结构清晰,后续维护时能快速区分不同类的属性范围,代码复用性也足够。
2. 组合模式(更灵活的替代方案)
如果不想用多层继承,可将时间属性封装为独立的TimePeriod类:
public class TimePeriod { public int Year { get; set; } public int Month { get; set; } }
然后让需要时间属性的类组合这个TimePeriod对象(而非继承),比如:
public class SomeTimedClass : BaseLocation { public TimePeriod Time { get; set; } // other fields }
这种方式符合单一职责原则,后续若要扩展时间相关逻辑(比如添加日期校验),只需修改TimePeriod类即可,比继承更灵活。
关于建造者模式的适用性
建造者模式的核心是解决复杂对象的构建问题(比如多参数构造、分步构建),对你当前的属性分类复用场景来说并不是最优选择,不需要强行套用。
内容的提问来源于stack exchange,提问作者Lube
相关产品推荐
相关产品推荐

