Страницы

Поиск по вопросам

воскресенье, 15 декабря 2019 г.

Генерация кода (Java/C#). Поделитесь опытом.

#кодогенераторы #java #c_sharp


Возникла необходимость использовать генератор кода. Предположительно нужно будет
генерировать код на Java и/или C#. Генерировать хотелось бы на основе UML-диаграмм
+ каких-то шаблонов на простом языке. Обнаружилось довольно-таки много различных генераторов,
которые в том или ином объеме решают задачу. Чтобы было понятнее, о чем речь, в качестве
примера можете посмотреть генератор Agile Platform. Прошу тех, кто использовал подобные
генераторы, поделиться впечатлениями. Предлагаю такой формат:

Название генератора.
Удобство в использовании.
Экономия времени (по сравнению с написанием кода вручную).
Расширяемость (интересует в первую очередь, можно ли генерировать код на своих языках
путем описания их синтаксиса).
Краткое описание впечатлений (в двух словах!).

Большая просьба не превращать в обсуждения типа "генерация кода: хорошо это или плохо?".
Интересует мнение тех, кто использовал генераторы на практике или хотя бы в свое время
с ними ознакомился. Спасибо.    


Ответы

Ответ 1



У нас есть кодоген из java классов в c++ и c# + второй кодоген джавы по джаве. Основные мысли Писать только самому, потому что саппорта и маленьких "рюшечек" кодоген требует немало. Если у вас зоопарк языков и сред - кодогенить лучше всего на основе стороннего описателя, например xml файлика. Через 3 дня у вас конечно всё заработает в основном... Но ещё 3 недели надо будет потратить чтобы покрыть все исключения :) Кодоген это добро! И чем больше проект тем большее это добро. На одном из прошлых проектов кодоген у нас появился когда нас было всего трое и кода было не больше 30к строк. Уже тогда он помогал здорово. Ну и правила написанные кровью: КОДОГЕН ДОЛЖЕН БЫТЬ ДЕТЕРМЕНИРОВАННЫМ. По одинаковым файлам результат должен быть одинаков до байта. КОДОГЕН ДОЛЖЕН БЫТЬ ПОКРЫТ ТЕСТАМИ НА 100%.

Ответ 2



Кодогенератор у нас свой (только не по UML, а по схеме БД). Если на заморачиваться с CodeDOM (чтобы сделать генератор независимым от языка программирования), пишется довольно быстро. Тупой генератор кода по схеме БД пишется где-то полдня. Навороченный, с возможностью тонкой настройки маппинга (наследование, енумы, пространства имён с разными префиксами, переопределение свойств физических объектов БД) - дня три.

Ответ 3



Где-то лет десять назад я принимал участие в создании подобного генератора. Суть задачи была такая: есть UML диаграмма теста шины процессора согласно спецификации, и нужно, путем ряда преобразований, превратить ее в код на языках описания аппаратуры (VHDL, Verilog, SystemC и т.п.). Делалось это с помощью Yacc/Bison и XSLT силами нескольких студентов-интернов в течение месяца. Резюме. Написать генератор оказалось несложно и практическая польза была значительной, но сама поддержка в дальнейшем (когда студенты ушли по другим проектам) была хлопотной; поэтому если есть возможность купить готовый, лучше купить готовый. Польза генератора проявлялась тогда, когда нужно было генерировать сразу в несколько языков, если же требовался тест на одном языке, то особого преимущества перед написанием кода не чувствовалось.

Ответ 4



Вот простой и неприхотливый инструмент для генерирования UML кода и построения диаграмм классов из java кода: java2uml.

Комментариев нет:

Отправить комментарий