Для какого кода вы бы рассмотрели возможность использования генератора кода, такого как CodeSmith?

StackOverflow https://stackoverflow.com/questions/4720186

  •  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 сэкономило бы массу усилий по разработке.

Для вещей, которые имеют повторяющуюся структуру и четко определенные правила о том, что эти вещи должны делать, генерация кода может быть замечательной вещью.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top