Почему Ruby on Rails называется домен-ориентированным языком? - PullRequest
12 голосов
/ 12 мая 2010

Недавно, когда я пытался объяснить, почему Ruby on Rails является предметно-ориентированным языком (DSL) для стажера в моей организации, я не смог сформулировать свои аргументы в пользу того, что мне хотелось бы.Возможно, я недостаточно хорошо понимаю пространство, чтобы учить нюансам.Переадресация его на статью Мартина Фаулера или на то, что Google оценил один InfoQ или другой материал, тоже мало чем помогла.

Может кто-нибудь объяснить, почему Rails является DSL с примером / параллельной ситуацией,не вуду вещи для тех, кто довольно плохо знаком с миром кода?Понимание идеологии может также помочь в разработке тонкостей экосистемы рельсов?

Ответы [ 5 ]

13 голосов
/ 12 мая 2010

Технически, ruby ​​- это не DSL, он просто позволяет очень аккуратно писать внутренние DSL. Эта ссылка на вики-блог Мартина Фаулера должна помочь прояснить ситуацию.

Rails был описан как DSL, хотя я думаю об этом более точно как о структуре, которая очень хорошо использует несколько DSL.

Редактировать: Вступление к публичной версии книги DSL Мартина Фаулера содержит мотивирующий пример, хотя оно все еще ориентировано на программистов.

Снова отредактируйте: пример "voodoo" может быть полезен, если вы укажете, что ruby ​​позволяет рубиновому коду выглядеть как

port 2001

respond :resource=>"/hello" do  |request, response|
  response.body = "<message>hello</message>"
end

, который чище, чем прямой вызов методов. Реализация DSL может потребовать кода типа «вуду» (создание * DSL намного сложнее, чем его использование), и в целом кто-то относительно новичок в кодировании должен в первую очередь беспокоиться о том, что делает DSL, а не так это реализовано.

Что делает ruby ​​хорошим во внутренних DSL, включает в себя (1) использование блоков (у любого языка с чистыми замыканиями есть это преимущество), (2) класс методов, которые не требуют скобок, и (3) возможность изменять классы в летать (что делает validates). Вероятно, есть еще кое-что, о чем я не думал.

5 голосов
/ 12 мая 2010

Ruby - это язык, который вы можете использовать для создания DSL. Ruby on Rails можно рассматривать как DSL (предметно-ориентированный язык) для создания веб-приложений.

4 голосов
/ 12 мая 2010

Ruby, конечно, не DSL. Это язык общего назначения, который противоположен DSL. Однако это язык, который очень подходит в качестве хоста для внутренних DSL-стилей. То есть; Вы можете использовать Ruby для создания DSL с.

0 голосов
/ 16 мая 2019

Я задавал себе тот же вопрос при работе с тестированием капибары "DSL" . На мой взгляд, при упоминании Ruby-фреймворков, таких как Rails, как DSL, этот термин просто ошибочен. Итак, ответ на ваш вопрос будет следующим: он называется DSL из-за жаргона Ruby-программиста.

Чтобы быть справедливым, следуя предложению Мартина Фаулера (см. здесь ), мы могли бы назвать эти структуры внутренними DLS (подмножество языка общего назначения для конкретной цели). Но я не думаю, что существует концептуальная разница между понятием framework .

Уникальная синтаксическая гибкость Ruby просто делает фреймворки, написанные в определенном стиле, похожими на совершенно новый язык (хотя и очень простой). Лично я не назвал бы что-либо специфичным для предметной области языком, который не имеет уникального синтаксиса или является лишь подмножеством языка общего назначения (некоторую поддержку этому можно найти в этом ответе на SO ).

0 голосов
/ 12 мая 2010

Я не совсем понимаю вопрос. Ruby - это не предметно-ориентированный язык, это язык общего назначения. Не имеет смысла называть это DSL, потому что это не так. Поэтому вся посылка вопроса не имеет смысла.

...