XML<=>XLS на С# для частного бюро оценки.

Jun 26, 2014 23:13

Оригинал взят у droids_life в XML<=>XLS на С# для частного бюро оценки.

Выкатил тут, кстати, родителям второй релиз конвертилки. Писал про неё уже пару раз (например, http://masterden.livejournal.com/60181.html). Не покидает ощущение, что её можно было сильно быстрее и проще сделать на VBA прямо внутри эксельки. Но проект был домашний и от него хотелось ещё и веселья. В итоге, поддержал себя в форме и не протухаю в плане .NET. Прилада, надеюсь, скоро будет колбасить не только родительские файлы, но и левые заказы.

В коде я порезвился на славу, конечно. Тезисно:

* UI сдела на WPF. К сожалению, делал его на скорую руку и в плане кода он не очень правильный: не использовал Commands, нет горячих клавиш, MVVM нормальным там и не пахнет. Зато поддержал drag'n'drop =) Последний раз его делал ещё в СофтЛабе для редактора квестов.

* Код парсинга входа и выхлоп - тяжеловесный LINQ. По сути, императивного кода там 5%. Остальное - это LINQ to Objects выражения, "готовящие" модель данных и LINQ to XML выражения, описывающие "выхлоп". На первый взгляд, кажутся перебором. Однако получился интересный опыт. Вторую версию (или итерацию) я писал после полугодового перерыва (даже по vcs проверил :) и после отрытия кода тяжелее всего было вникать не в эти конструкции, а в логику GUI и всякий glue-код. А сами выражения мозг загружал в себя и осознавал быстро (не больше минуты). Один из примеров чтения: http://pastebin.com/wQ3de48U. Пример записи: http://pastebin.com/mERTirnH.

* Динамическую типизацию из C# 5 внезапно пользовал мало. Хоть и делалась она (в связке с named parameters и default значениями аргументов функций - про это John Skeet в C# in Depth хорошо написал) как раз для Office COM Interop. Банально неудобно: не работает code completion и опечатки периодически случаются.

* А ну да : ) Самое-то главное: с Excel вся работа делалась через COM API.

* Проект разбит на три сборки: непосредственно конвертилка (модель данных, IO), CLI интерфейс для отладочных целей, GUI для конечных пользователей.

* Процесс конвертации распараллелил на уровне файлов - запинал Parallel.ForEach %)

* Из интересного, правильности ради все строковые ресурсы вынес в локализационные файлы (заодно и научился это в .NET делать).

* В качестве VCS запользовал Mercurial на Bitbucket.

Опыт написание оказался крайне полезным:
  • Уже в ЦФТ полученный багаж позволил за пол дня слабать инструмент о котором чуть позже расскажу.
  • Как уже сказал, держу себя в курсе дел .NET мира:
    • Можно преподавать студентам =)
    • Есть о чём потереть с .NET-корешами и можно вместе посмеяться над стрёмными тестовыми заданиями, которые им присылают.

программирование, .net

Previous post Next post
Up