2012-03-19 13 views
0

私の大きなプロジェクトの一環として、Web用のパーサを開発しています。定義済みのルールに従って、Webページからデータを取得してオブジェクトに配置します。POCOのアノテーションの種類

は私が(データを格納するEFでPOCOを使用されている)Car { Power, Weight, Price }オブジェクトがあるとします。私は2008年

アイデアは、このようなものです.NET 4.0を使用してC#で記述し、SQL Serverの。 パーサのルールを作成するので、サイトをスキャンするときにオブジェクトのプロパティを埋めるようにします。

例:Car { Power=100Hp, Weight=1000kg, Price=7000$ } これはすべて機能しています。しかし、すべてのサイトが異なり、1つのサイトでもデータを別の方法で構築できるため、解析ルールを検証する方法が必要です。アイテムのURLの

  1. テイクリスト:

    私はテスターアプリ、その意志を作成したいです。ダウンロードして、何らかのフォーマットで保存してください。

  2. アイテムのどのプロパティが正しく解析されているかを手動でチェックし、正しいものとしてマークします。
  3. テスターを検証モードで実行します。どこからでもネットからすべてを読み込み、正しいとマークしたデータと比較する必要があります。

このようにして、私はルールの単位テストを行うことができます。

Car { 
    Power { Value, IsCorrect}, 
    Weight {Value, IsCorrect}, 
    Price {Value, IsCorrect}} 

だから、私のすべての既存のコードは次のことができます、私は私のようないくつかのラッパーを持っていると思い、私のエンティティを変更する必要はありません、このすべてを実装するために:

は、今、実際の質問を行きます以前のように動作し、私のテストコードだけで、その注釈情報を使用することができます。もちろん、私はこの情報をデータベースまたはXMLのどちらかに直列化できるようにしたいと思います。

私の一般的な考え方は、CarをXMLにシリアル化してから、手動でアノテーションプロパティを追加してチェックすることです。手動でここで私はXmlDocumentメソッドを使用して意味します。これはうまくいくはずですが、アノテーションをメモリに保存してアクセスする方法についての結論には至りませんでした(XmlDocumentですべてのバリデーションを行うのは気に入らない)

おそらく、いくつかの動的言語ではjavascript私は単に私がC#で、このようなsomehtingを想像することはできません:(

答えて

1

あなたがプロパティまたは式ツリーを識別するための文字列を使用していずれかのことを少しラッパークラスを作成することができ、このような注釈

Car c = { Power = 1, Weight=2 ...}; 
c["Power_IsCorrect"] = true; 
c["Weight_IsCorrect"] = true; 
///... etc 

を追加します。

例fまたは文字列を使用するクラス:私は、このような何かのあなたの答えに感謝を考え

var annotatedCar = new AnnotatedObject<Car>(car); 
annotatedCar.IsCorrect["Power"] = true; 
+0

class AnnotatedObject<T> { private Dictionary<string, bool> _propertyMap = new Dictionary<string, bool>(); public AnnotatedObject(T originalObject) { OriginalObject = originalObject; } public T OriginalObject { get; private set; } public bool IsCorrect[string property] { get { bool result; if(!_propertyMap.TryGetValue(property, out result)) result = false; return result; } set { _propertyMap[property] = value; } } } 

あなたは、このようにそれを使用することができます。私はそれを考慮する必要があります。 –