0

私のアプリケーションには、次のクラス構造があります (時間のために省略され、名前が変更されています)。コードを書いているとき、Action1 と Action2 の類似点は何らかの一般化が必要だと感じました。UML クラス図に関連する部分を示しました (以下のコードで説明するインターフェイスを除く)。この「より良い」アーキテクチャ/クラス設計を行う方法について、誰かがアイデアを持っているかどうか疑問に思っていました。また、非常によく似たアクションが近い将来の反復で実装される可能性があります。

UML ダイアグラム http://img16.imageshack.us/img16/2569/mainmm2.jpg

インターフェイスのコード

public IActor1
{
    public Property1 { get; set; }
    public Property2 { get; set; }
}

public IActor2
{
    public Property3 { get; set; }
    public Property2 { get; set; }
}
4

2 に答える 2

0

これがあなたの質問に答えるかどうかはわかりませんが、ここに行きます。

まず、IActor1 と IActor2 には、共有プロパティを持つ共通の基本インターフェイスが必要です。

public interface IActorBase {
    public Property2 { get; set; }
}

これで、アクションには汎用ベースが必要です

public abstract class ActionBase<TActor> where TActor: IActorBase {
    public List<String> StringList { get; set; }
    public List<TActor> ActorList  { get; set; }
}

次に、Action1 と Action2 を次のように実装します。

public class Action2 : ActionBase<IActor2> { }

public class Action1 : ActionBase<IActor1> {
    public enum Action1Type Type { get; set; }
}

詳細がなければ、ここで何ができるかわかりません...

于 2009-02-17T01:21:24.673 に答える
0

これを最初に見たところ、次のことがわかりました。

どちらもインターフェースが既に実装されているため、インターフェースをオーバーロードします。次に、Action1 の List、List、および ActionType プロパティをカプセル化する Action インターフェイスを作成し、Action2 には空のダミー ActionType プロパティを残します。ただし、これは非常に面倒で、あまり拡張可能ではないようです (将来的に新しいアクションの計画があるため)。

于 2009-02-16T23:09:30.590 に答える