0

最近、論理構造の観点から現在のモデルとは異なる、まったく新しいデータモデルを導入しました。また、モデル構造をXMLとしてお客様に公開したいため、モデルの言語をドイツ語から英語に変更しました。

モデルを変換できるようにするために、新しいモデルのさまざまなクラスのすべてのプロパティを古いモデルに基本的に一致させる明示的な変換を実装しました。

このような:

private OldModel Convert(NewModel src)
{
  var dst = new OldModel();
  dst.Prop1 = src.SomeOtherProp
  dst.Prop2 = Convert(src.ComplexProp);
  //....
  return dst;
}

ここで、カバレッジとテストの目的で、新しいモデルのすべてのプロパティが古いモデルに書き込まれていることを確認します。また、プロパティを忘れないようにし、将来のモデル拡張のためにプロパティを忘れないようにします。

私の考えは、コードファイルを解析し、新しいモデルから読み取られたすべてのプロパティを抽出し、リフレクションを使用して新しいモデルを実行し、それらをその中の実際のプロパティと比較することです。

この解決策は良いものとは思えません:-)何か提案はありますか?

助けてくれてありがとう!

4

2 に答える 2

0

最終的に、次のような正規表現を使用してコードファイルを解析することにしました。

@"private static [a-zA-Z0-9.]+[ ]+Convert[(][^)]*[)]\s*[{](?<body>[^{}]*(((?<Open>[{])[^{}]*)+((?<Close-Open>[}])[^{}]*)+)*(?(Open)(?!)))[}]";

このようなメソッドに一致private static Namespace.ClassName Convert(Namespace.ClassName input)し、メソッド本体を抽出します。コンバーターの方法は単純な構造パターンに従っているため、必要な情報を簡単に抽出できました。

于 2012-11-27T07:35:11.107 に答える
0

AutoMapperのようなマッピングライブラリを使用することをお勧めします。それらは、マッピング、コンバーターを構成し、パブリックプロパティと特定のメソッドで動作することを可能にします。

于 2012-11-26T23:59:12.640 に答える