Automapper против отображения во время выполнения через файл конфигурации и отражения - PullRequest
3 голосов
/ 20 ноября 2011

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

Я занимаюсь разработкой клиента веб-службы C #, который извлекает данные из базы данных, стоящей завеб-сервис.Ответ веб-службы содержит данные в элементе CDATA в виде XML.Схема xsd доступна.В XML есть элементы, которые представляют один набор данных / строку.Я должен использовать только несколько полей одного набора данных.После получения данных я должен проверить некоторые бизнес-правила / условия и записать эти поля в другую систему.Считывая некоторые значения из другой системы, проверьте некоторые бизнес-правила и отправьте их обратно в веб-службу, инкапсулированную в соответствующем формате XML в соответствии со схемой.

То, что я сделал до сих пор.Я использовал XSD.exe для генерации классов C # в соответствии с базовой схемой.Я думаю, что у меня есть следующие варианты, чтобы заставить мой сценарий работать:

  1. ORM Framework: Это должно быть излишним для моего приложения.Или это не решение, поскольку я не связываюсь с базой данных напрямую.

  2. Automapper: кажется хорошим решением.Но я думаю, что это не такой гибкий вариант, как мой 3. вариант (см. Далее).Если ошибка в сопоставлении обнаружена после развертывания моего приложения, я должен перестроить приложение.Другим негативным моментом будет, если схема изменится, мне придется пересобрать приложение снова.(Или я всегда адаптировал свое приложение в соответствии со схемой?)

  3. Через пользовательский файл сопоставления и отражения: я не уверен, реально ли это осуществимо, но это было бы наиболеегибкое решение на мой взгляд.Решение будет похоже на это http://www.techrepublic.com/article/applied-reflection-dynamically-accessing-properties-of-a-class-at-runtime/6099345 Если я правильно понял эту статью, то был бы файл конфигурации, который отображает тип класса и его свойства на типы назначения, например: SourceClassType = ClassA, SourcePropertyName = PropA-> DestinationClassType = ClassB, DestinationPropertyName = PropX.

  4. Linq2Xml: С помощью Linq2Xml я мог извлечь необходимые данные из XML и поместить их в свои собственные определенные классы.Но как мне поместить данные обратно в XML в соответствии со схемой, которую ожидает веб-служба?

Правильно ли выполнен мой анализ?Я что-то не так понял?Чтобы вы посоветовали?У меня есть другие варианты?

1 Ответ

0 голосов
/ 29 декабря 2011

Если после развертывания моего приложения обнаружена ошибка в отображении, я должен перестроить приложение.Другим негативным моментом будет, если схема изменится, мне придется пересобрать приложение снова.(Или я всегда адаптировал свое приложение в соответствии со схемой?)

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

Я бы использовал сериализацию xml (de) и Automapper.Десериализовать xml в объект, использовать automapper и вашу пользовательскую бизнес-логику для преобразования источника в объект назначения, а затем сериализовать объект назначения в xml в качестве вашего вывода.

...