Я видел систему, которая использовала частичные классы и частичные методы для обеспечения возможности регенерации кода без влияния на пользовательский код. «Механизм правил», если хотите, был полностью сгенерирован из диаграммы состояний Visio. Это в основном плохой рабочий процесс, но его очень легко изменить. Диаграмма Viso была экспортирована в XML, который был прочитан с использованием powershell и T4 для генерации классов.
Приведенный выше пример относится к внешнему DSL. И.Е. внешний по отношению к языку программирования, на котором выполняется приложение. С другой стороны, вы можете создать внутренний DSL, который реализуется и используется на языке программирования.
Эта и предыдущая статья о DSLS от Code-Magazine довольно хороши.
В приведенной выше ссылке Нил Форд показывает, как создать внутренний DSL в C #, используя свободный интерфейс.
Одна вещь, которую он еще не упомянул, это то, что вы можете поместить этот атрибут [EditorBrowsable (EditorBrowsableState.Never)] в ваши методы, чтобы они не выглядели как intellisense. Это означает, что вы можете скрыть не-DSL (если хотите) методы класса от пользователя DSL, что делает свободный API гораздо более доступным для обнаружения.
Вы можете увидеть свободный интерфейс, записываемый вживую в этой серии видео от Даниэль Каззулино при написании контейнера IoC с TDD
В отношении внешних DSL у вас также есть опция Oslo (CTP на данный момент) , которая достаточно мощна, поскольку позволяет создавать внешние DSL, которые можно выполнять напрямую, а не для использование генерации кода, которое приходит к нему, на самом деле совсем не похоже на DSL.