Для какого кода вы бы рассмотрели возможность использования генератора кода, такого как CodeSmith?
-
12-10-2019 - |
Вопрос
Я использую CodeSmith для шаблонов PLINQO, чтобы создать свой DAL из объектов моей базы данных;это отлично работает!
Я считаю, что это основное применение приложений-генераторов кода, но мне любопытно...для какого другого кода вы бы рассмотрели возможность использования генератора кода?Есть ли у вас какие-либо шаблоны CodeSmith, которые вы часто используете (если да, то что это делает)?
Решение
Я не пользовался CodeSmith, но я проделал изрядную часть работы по генерации кода.Примечательно, что я написал большую часть системы управления конфигурацией (CM) для системы WiMAX, где CM-код был сгенерирован для 3 разных платформ.Единственным отличием была модель CM для каждой платформы.
Модель была написана на пользовательском доменно-ориентированном языке (DSL), для которого мы создали синтаксический анализатор.Язык представлял собой базовый стиль контейнера / элемента, в котором контейнеры могли вкладываться и иметь идентификатор, а элементы были предопределенных типов.Документация была атрибутом элементов и контейнеров.Вы могли бы добавить Lua фрагменты определений элемента и контейнера для выполнения семантической проверки (например, значение находится в правильном диапазоне, если это IP-адрес, находится ли оно в диапазоне CIDR, определенном в другом месте, и т.д.).
Анализатор сгенерировал синтаксическое дерево, которое затем мы запустили в шаблонах.Язык шаблонов представлял собой частичную реализацию C StringTemplate ( Шаблон строки ).Мы использовали его для создания:
- Специфичный для модели C API, к которому приложения могут обращаться для получения значений конфигурации,
- Собранный Lua-код для проверки модели и предоставления полезных сообщений об ошибках,
- Два "бэкэнда" для API, которые будут управлять значениями в памяти (для временного манипулирования моделью) и в системе баз данных (для совместного использования между процессами),
- Анализатор и запись конфигурационных файлов,
- HTML-документация и
- Реализация интерфейса командной строки (CLI) для интерактивного просмотра и изменения конфигурации.
Оглядываясь назад, я должен был просто использовать Lua непосредственно в качестве DSL.Это было бы более подробно, но наличие уже существующего синтаксического анализатора и множества доступных мне вариантов шаблонов Lua сэкономило бы массу усилий по разработке.
Для вещей, которые имеют повторяющуюся структуру и четко определенные правила о том, что эти вещи должны делать, генерация кода может быть замечательной вещью.