私は、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
ただし、このコードを過度に断片化しているため、バルーンが多すぎる可能性があります。本質的に1つのメソッドインターフェイスになることをあまり恐れてはいけないかもしれませんが、このパスを進む前に、デザインパターンが欠落していないかどうかを確認したかったのでしょうか。(私の頭に浮かんだのは、デコレータまたはコンポジットパターンだけでした)
アップデート
すべてのプロパティは一意のタイプです。
最終的に、これは依存性注入の一形態です。コードがめちゃくちゃになっていて、現在Ninjectのようなものを使用することはできませんが、最終的にはこれらの一部を取り除き、インジェクションコンテナを使用できるようになるかもしれません。現在、変数を設定するだけでなく、実行されているロジックもいくつかあります。これはすべてレガシーコードであり、少しずつクリーンアップしようとしています。