Я уже писал про свои эксперименты с DSL, захотелось подтянуть матчасть и прочитать классический труд. Книга на самом деле состоит из двух книг: первая - введение в DSL и обзор различных техник, вторая - типичный список паттернов, в которую Мартин собрал всё что только можно. Первая часть на пять, позволяет структурировать знания, вторую - тупо пролистал по диагонали.Зачем нужен DSL? - ... two main ones: improving productivity for developers and improving communication with domain experts. A well- chosen DSL can make it easier to understand a complicated block of code, thus improving the productivity of those working with it. It can also make it easier to communicate with domain experts, by providing a common text that acts as both executable software and a description that domain experts can read to understand how their ideas are represented in a system. This communication with domain experts is a benefit more difficult to achieve, but the resulting gain is much broader because it helps unclog one of the worst bottlenecks in software development—the communication between programmers and their customers.
Главная идея: разделение на Internal и External DSL, необходимость для DSL Semantic Model, которая строится поверх Domain Model. Картинка которая объясняяет необходимость в DSL: даже скомпилированный код нуждается в движущихся частях, которые и обеспечиваются DSL. Здесь же корень стремлений вынести бизнес-логику в СУБД (результат немного предсказуем).
Идеальный вариант языки вида Ruby/Groovy, которые содержат богатые возможности для написания DSL. В любом случае, DSL очень просто можно реализовать практически где угодно, если архитектура приложения будет достаточно продумана: разделение на статическое API и движущиеся части в виде конфигов.