#кодогенераторы #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.
Комментариев нет:
Отправить комментарий