Я работаю над библиотекой, которая создает довольно большие XML-файлы (предложения электронной коммерции).
Я использую бизнес-классы (такие как ProductInfo, PriceInfo и т. Д.), И я генерирую полученный из них XML.
Моя последняя задача - реализовать функциональность, позволяющую генерировать этот XML из входных файлов CSV.
Файлы CSV не имеют предварительно определенного формата, и это задача пользователя (мы предоставляемприложение, которое позволяет им сделать это) отобразить все столбцы CSV в их соответствующие аналоги в нашем фиксированном формате XML.
Таким образом, в основном их задача состоит в том, чтобы назначить каждый столбец одному из моих полей классов бизнеса: «все данныеиз этого столбца идет в ProductInfo.ShortDescription и т. д. ".
Наш формат, вероятно, изменится в будущем - он будет постоянно обновляться и расширяться - и поэтому я хотел бы сделать мою реализацию как можно более общей.
Решение, которое я рассмотрел, следующее:
- библиотека возвращает имена всех доступныхle / обязательные поля
- наш пользователь сопоставляет столбцы CSV с этими полями
- Я реализую пользовательский атрибут (содержащий имя поля - строку) и помечаю им все поля в моих бизнес-классах.Поэтому, как только они сопоставили все столбцы и отправили данные в CSV, моя библиотека начинает создавать ProductInfos и т. Д., Присваивая входные значения полям, идентифицированным по имени атрибута.Это можно сделать с помощью рефлексии.
Это хорошая идея?У меня есть некоторые опасения по поводу производительности (я знаю, что рефлексия медленная), хотя я не уверен, насколько серьезной будет эта проблема.Есть ли другие проблемы, о которых мне следует знать?Есть ли лучшие альтернативы?