0

この状況に対応する特定の設計パターン (おそらく C++ を対象とする) があるかどうか疑問に思っていました。

次の形式のデータを含む XML ファイルがあります。

<STH_XML>
<tag1>
    <tag2 id="myId1">
        <tag3 name="type" value="myVal1"/>
        <tag4 name="device" value="myVal2"/>
        <tag5 name="instances" value="myVal3"/>
        <tag6>
            <tag7 id="myId2">
                <specs name="type" value="myVal4"/>
                <specs name="frequency" value="myVal5" unit="MHz"/>
            </tag7>
        </tag6>
    </tag2>
</tag1>

残念ながら、この XML の XSD/DTD は頻繁に変更される可能性があります。

次のように、XSD/DTD を一連の C++ 構造体またはクラスに自動的に変換する必要があります。

struct tag7
{
   std::string id;
   std::string type;
   std::string frequency;
}

struct tag6
{
   std::set<tag7*> tag6s;
}

struct tag2
{
   std::string id;
   std::string type;
   std::string device;
   std::string instances;
   tag6 elem6; // because I know there is only one from the XSD analysis
}

struct tag1
{
   std::set<tag2> tag2s;
}

この機能を実現するのに最適な設計パターンは何ですか?

4

1 に答える 1

1

それが必要なデザインパターンであるかどうかはよくわかりません。

ただし、プログラミング パラダイムをお勧めできます: コード生成です。

XSD/XDD で構造を定義し、必要な C++ を自動的に生成structできます。

さらに一歩進んで、言語に依存しない形式で物事を定義し、その形式から XSD と C++ の両方を生成できます。その後、たとえば C# に移動する必要がある場合は、そのためのコード ジェネレーターを作成できます。

最も基本的なコード ジェネレーターは、ファイルを読み込んで解析し、解析されたデータに対して一連の print ステートメントを使用してコードを "生成" します。

このプロセスは、ビルド前のステップとしてビルドの一部にすることができます。ジェネレーターは XSD を処理して C++ を吐き出し、その C++ を使用してプロジェクトをビルドします。

何をする必要があるかはすでにわかっていると思いますが、それcode generationは用語です。

于 2013-05-21T17:40:55.247 に答える