В рамках моего более крупного проекта я разрабатываю синтаксический анализатор для Интернета, который в соответствии с предопределенными правилами будет получать данные с веб-страниц и помещать их в объекты.Я пишу на C #, используя .Net 4.0 и SQL Server 2008.
Идея такова:
Предположим, у меня есть объект Car { Power, Weight, Price }
(который является POCO, используемым в EF для хранения данных),Я создаю правила для своего парсера, поэтому при сканировании какого-либо сайта он попытается заполнить свойства объекта.
Например: Car { Power=100Hp, Weight=1000kg, Price=7000$ }
Все это работает.Но поскольку все сайты разные и даже на одном сайте данные могут быть структурированы по-разному, мне нужен какой-то способ проверки моих правил синтаксического анализа.
Я хочу создать приложение для тестирования, которое будет:
- Взять список URL-адресов товаров.Загрузите их, сохраните в каком-либо формате.
- Я вручную проверю, какие свойства элементов анализируются правильно, и помечу их как правильные.
- Запустит тестер в режиме проверки.Где он должен снова загрузить все данные из сети и сравнить их с данными, которые я пометил как правильные.
Таким образом, у меня могут быть какие-то юнит-тесты для правил, пока я их улучшаю.
Теперь встает актуальный вопрос: для того, чтобы реализовать все это, я не хочу изменять свои сущности, я хотел бы иметь какую-то обертку вроде:
Car {
Power { Value, IsCorrect},
Weight {Value, IsCorrect},
Price {Value, IsCorrect}}
Так что все мои существующиекод может работать как прежде, и только мой тестовый код может использовать эту информацию аннотации.Также, конечно, я хочу, чтобы эта информация была сериализуемой, либо для базы данных, либо для XML.
В настоящее время моя общая идея состоит в том, чтобы сериализовать Car в Xml, а затем вручную добавить свойства аннотации и проверить их.Под ручным здесь я подразумеваю использование методов XmlDocument.Это должно сработать, но я не пришел к выводу о том, как хранить аннотации и получать к ним доступ в памяти (мне не нравится идея выполнять всю проверку через XmlDocument)
Возможно, на каком-то динамическом языке,как javascript, я бы просто добавил аннотации, подобные этой
Car c = { Power = 1, Weight=2 ...};
c["Power_IsCorrect"] = true;
c["Weight_IsCorrect"] = true;
///... etc
Я не могу представить что-то подобное в C #: (