1

さまざまなタイプのxmlメッセージを処理するMessageProcessorクラスがあります。メッセージタイプに基づくswitchステートメント(C#)は、適切なメソッドを呼び出してxmlを解析し、メッセージのタイプに必要なデータを抽出します。

むしろ、いくつかのパーサークラスが必要です。そのうちの1つは、メッセージタイプに基づいて作成されたときにMessageProcessorに挿入されます。スイッチはポリモーフィズムに置き換えられました-これまでのところ良好です。

ただし、私が抱えている問題は、現在のパーサーメソッドがそれぞれ異なる結果を返すことです。たとえば、ParseExecute(xml、out Session)、ParseCallback(xml、out id、out name、...)

このシナリオでやりたいことをすることは可能ですか?

4

3 に答える 3

1

ただの提案。

基本結果クラスを作成し、そこからすべての異なる結果タイプを派生させることを考えましたか?そのようにすることで、ポリモーフィズムを使用して結果を具体的なタイプに再解釈することを考えることができます。

しかし、私はあなたのデザインを深く知らないので、これはあなたのためにいくつかの余分な複雑さを加えることができます。少なくともそれがいくつかのインスピレーションを与えることができることを願っています:)

于 2009-12-31T12:57:58.920 に答える
0

スイッチはChainOfResonsibilityに置き換えることもできます

于 2009-12-31T13:02:17.693 に答える
0

ある種の工場パターンかもしれません

public class ParserFactory
    {
        public static IParser Create(string type)
        {
            IParser parser;
            switch (type)
            {
                case "1":
                    parser = new Parser1();
                    break;
                case "2":
                    parser = new Parser2();
                    break;
                default:
                    throw new ArgumentOutOfRangeException("type");
            }

            return parser;
        }
    }

また、インターフェースを実装するオブジェクトも返します

public class Parser1 : IParser
    {

        public IParseResult Parse(string xml)
        {
            //Set values

            return result;
        }
    }
于 2009-12-31T13:37:57.427 に答える