2012-03-19 3 views
0

В рамках моего крупного проекта я разрабатываю парсер для Интернета, который, согласно предопределенным правилам, будет получать данные с веб-страниц и помещать их в объекты. Я пишу в C# с использованием .Net 4.0 и SQL Server 2008.Какая-то аннотация для POCOs

Идея такова:

Предположим, у меня есть Car { Power, Weight, Price } объект (который является ПОКО используется в EF для хранения данных). Я создаю правила для своего синтаксического анализатора, поэтому при сканировании какого-либо сайта он попытается заполнить свойства объекта.

Например: Car { Power=100Hp, Weight=1000kg, Price=7000$ } Все это работает. Но так как все сайты разные, и даже на одном сайте данные могут быть структурированы по-другому, мне нужно каким-то образом проверить мои правила синтаксического анализа.

Я хочу, чтобы создать приложение тестер, который будет:

  1. Тейк список URL-адресов пунктов. Загрузите их, сохраните в некотором формате.
  2. Я проведу вручную, какие свойства элементов будут проанализированы правильно и пометьте их как правильные.
  3. Запустите тестер в режиме проверки. Где он должен снова загружать все из сети и теперь сравнивать с данными, которые я обозначил как правильно.

Таким образом, у меня могут быть свои модульные тесты для правил, в то время как я их улучшаю.

Сейчас идет актуальный вопрос: для того, чтобы осуществить все это, я не хочу, чтобы изменить мои сущности, я хотел бы иметь некоторую оболочку, как:

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

Так что весь мой существующий код может как и раньше, и только мой тестовый код, может использовать эту информацию аннотации. Кроме того, конечно, я хочу, чтобы эта информация была сериализована либо в базе данных, либо в XML.

Прямо сейчас моя общая идея - сериализовать автомобиль в Xml, а затем вручную добавить свойства аннотации и проверить их. Здесь вручную я имею в виду использование методов XmlDocument. Это должно сработать, но я не пришел к выводу о том, как хранить и получать доступ к аннотациям в памяти (мне не нравится идея делать все проверки с помощью XmlDocument)

Возможно, на каком-то динамическом языке, например javascript Я бы просто добавить аннотации как этот

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

Я не могу себе представить, как это somehting в C# :(

ответ

1

Вы могли бы создать небольшой класс-оболочку, которая либо использует строки для определения свойств или деревьев выражений.

Пример f или класс, который использует строки:

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; } 
    } 
} 

Вы могли бы использовать его как это:

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

Я думал, что-то вроде этого, спасибо за ваш ответ. Я должен это рассмотреть. –

Смежные вопросы