我正在重构一些通过 case 语句一遍又一遍地做接近相同事情的遗留代码:
switch(identifier)
case firstIdentifier:
(SomeCast).SetProperties(Prop1,Prop2,Prop3);
break;
...
case anotherIdentifier:
(SomeDifferentCast).SetProperties(Prop1, Prop2, Prop3);
break;
所以,我尝试创建一个独特的界面,这样它就可以成为
(SameInterfaceCast).SetProperties(Prop1,Prop2,Prop3);
但是,我随后发现有些项目甚至没有使用所有属性。于是,我开始想到更像这样的东西:
if(item is InterfaceForProp1)
(InterfaceForProp1).SetProp1(Prop1);
if(item is InterfaceForProp2)
(InterfaceForProp2).SetProp2(Prop2);
if(item is InterfaceForProp3)
(InterfaceForProp3).SetProp3(Prop3);
你可以创建一个这样的类:
public class MyClassUsesProp2And3 : InterfaceForProp2, InterfaceForProp3
但是,我担心我过度分散了这段代码,它可能会膨胀太多。也许我不应该太害怕本质上是一种方法接口,但我想在走这条路之前看看我是否缺少设计模式?(唯一出现在我脑海中但不太合适的是装饰器或复合模式)
更新
所有属性都是唯一类型。
最终,这是一种依赖注入的形式。代码太乱了,现在不能使用像 Ninject 这样的东西,但最终我什至可以摆脱其中的一些并使用注入容器。除了设置变量之外,目前还有一些逻辑正在完成。这都是遗留代码,我只是想一点一点地清理它。