1

という名前のスーパークラスを持つ継承階層がありますTransaction。クラスの 1 つで変数として使用していますが、 などの特定の型に変換するのに問題がありGameTransactionますScienceTransaction

特定の型にはそれぞれ特定の属性があるため、それがその型であるかどうかを確認してからtypeofキャストする必要がIf.. else if..あるため、 の派生クラスの数に応じて、などになりTransactionます。

これは面倒です。これを回避する他の方法はありますか?このための設計パターンはありますか?

4

3 に答える 3

0

私のスーパークラストランザクションは私のファサード(デザインパターン)クラスで使用されているため、特定の型へのキャストを含む、または必要とするメソッドまたはサービスがあるたびに、If.. Else IF.. Else IF.... チェックしてからキャストする必要がありますそのプロパティまたは属性にアクセスするための特定の型へ

はい..ファサードパターンを使用するときの問題でした。クライアント コードで追加のキャストを行う必要があります。

ファサードにジェネリックを使用することを検討してください

public class Facade
{
    public Transaction GetTransaction<T>() where T : Transaction
    {
        // any other process
        return (T)result;
    }
}

クライアント コードで呼び出すだけです。

GameTransaction gameTx = facadeInstance.GetTransaction<GameTransaction>();

ファサード パターンのもう 1 つのオプションは、依存性注入を使用することです。したがって、すべてのコードを共有する大きなクラスを作成するのではなく、オブジェクトとその依存関係を作成するためのシステムを提供します。そして、それは説明するのに長い話になります:)

于 2013-11-15T09:38:32.480 に答える