Как стать автором
Обновить
3
Карма
0
Рейтинг
Роман Кокорев @RKokorev

Разработчик .Net

Универсальный конвертер данных на платформе .Net Framework

Да, нам нужен конфиг регулируемый пользователем. Думаю если конфиг из текста туда получится затащить, то может и получится, надо пробовать. В любом случае это будет надстройка над automapper (сразу приходит мысль, а не сделать ли лайт аналогию с маппером с нуля)

Универсальный конвертер данных на платформе .Net Framework

Если не ошибаюсь, AutoМapper это меппер типов, причем детерменированный (можно настроить только из кода).
Например, нужно заполнить класс у которого член Product.Item c типом Object. Согласно требований задачи, в Item можно назначить экземпляр объекта один из типов Struct1 и Struct2, заполнение которых выполняется по разному — не уверен, что маппер с ним справится без костылей

Универсальный конвертер данных на платформе .Net Framework

SplitAndCalc — делает следующее парсит «31000 USD» на 31000 и «USD», заходит во внешний источник данных (например БД) берет курс USD/RUB, пересчитывает стоимость в рубли и возращает значение.
Правило это код, который для заданного пути возращает значение для заполнение узла.
Да, справочники правил, и их применения должны где-то храниться.
Про ‘TargetCurrency’ — это опечатка, исправил
Мысль статьи в том, что бы создать параметризуемый конструктор конвертаций различных узлов, что бы пользователь мог не сильно вдаваясь в подробности реализации встроенных правил мог ими пользоваться и главное читать (не код). Ну и XML это просто пример формата, а так конвертер способен работать с любыми форматами.
Рефлексию мы используем для быстрого достпа к данным объекта и сборки целевого экземпляра контейнера.
Найду время допишу в статью еще одно правило, для общего понимания идеи.

Универсальный конвертер данных на платформе .Net Framework

Придется менять настройки правил. В примере статьи правило возращает заполненный Msrp объект. Это сделано для простого примера и не совсем универсальное правило. В реальном коде мы стараемся делать максимально универсальные правила, которые могут работать с любой структурой. Например можно создать три правила для каждого узла: Vehicle.Msrp, Vehicle.Msrp.Currency, Vehicle.Msrp.Value, тогда они будут возращать скалярные значения и эти правила можно применить многократно.

Универсальный конвертер данных на платформе .Net Framework

У нас система работает с множеством внешних API с различными форматами. Привязка к XML свяжет нам руки. И еще, в большинстве случаев у нас идет конвертация во внешние форматы прямо из модели данных (вычитанной из БД), которая является тоже контейнером. Т.е. шаги (1-2) исключаются

Универсальный конвертер данных на платформе .Net Framework

да, спасибо за линк. но это тоже своего рода кеширование

Информация

В рейтинге
Не участвует
Откуда
Москва, Москва и Московская обл., Россия
Дата рождения
Зарегистрирован
Активность