Почему Ruby on Rails называется языком, специфичным для домена?
Недавно, когда я попытался объяснить, почему Ruby on Rails является предметно-ориентированным языком (DSL) для стажера в моей организации, я не смог сформулировать свои аргументы в пользу того, что хотел бы. Возможно, я недостаточно хорошо понимаю пространство, чтобы учить нюансам. Переадресация его на статью Мартина Фаулера или в Google, оценивающую один InfoQ или другой материал, также не сильно помогла.
Могут ли некоторые объяснить, почему Rails - это DSL с примером/параллельной ситуацией, которая не является чем-то вроде вуду для того, кто довольно плохо знаком с миром кода? Понимание идеологии может также помочь в разработке тонкостей экосистемы рельсов?
Ответы
Ответ 1
Технически, ruby не является DSL, он просто поддается написанию внутренних DSL очень чисто. Эта ссылка на wiki-страницу Мартина Фаулера должна помочь прояснить ситуацию.
Rails был описан как DSL, хотя я думаю об этом более точно как основа, которая очень хорошо использует несколько DSL.
Изменить: вступление к публичной версии книги DSL от Martin Fowler имеет мотивирующий пример, хотя он все еще нацелен на программистов немного больше.
Изменить еще раз: пример "voodoo" может быть полезен, если указать, что ruby позволяет выглядеть как код ruby
port 2001
respond :resource=>"/hello" do |request, response|
response.body = "<message>hello</message>"
end
который чище, чем вызов методов напрямую. Реализация DSL может потребовать "voodoo" как код (гораздо сложнее создать DSL, чем использовать его), и в целом кто-то относительно новый для кодирования должен сначала беспокоиться о том, что делает DSL, а не о том, как это реализовано.
Что делает рубин хорошим во внутренних DSL, включает (1) использование блоков (любой язык с чистыми закрытиями имеет это преимущество), (2) класс метода, который не требует скобок, и (3) способность изменять классы на летать (что и делает validates
). Вероятно, больше я не думал.
Ответ 2
Ruby - это язык, который вы можете использовать для создания DSL. Ruby on Rails можно рассматривать как DSL (Domain Specific Language) для создания веб-приложений.
Ответ 3
Ruby, конечно же, не DSL. Это язык общего назначения, который является противоположностью DSL. Это, однако, язык, который очень подходит в качестве хоста для DSL внутреннего стиля. То есть; Вы можете использовать Ruby для создания DSL с помощью.
Ответ 4
Я задавал себе тот же вопрос, когда работал с тестом Capybara "DSL". На мой взгляд, при упоминании Ruby-фреймворков, таких как Rails, как DSL, этот термин просто ошибочен. Итак, ответ на ваш вопрос будет следующим: он называется DSL из-за жаргонизатора Ruby.
Чтобы быть справедливым, следуя предложению Мартина Фаулера (см. Здесь), мы могли бы назвать эти структуры внутренними DLS (подмножество языка общего назначения для конкретной цели). Но я не думаю, что существует концептуальная разница между понятием структуры.
Вид уникальной синтаксической гибкости Ruby просто делает фреймворки, написанные в определенном стиле, похожими на совершенно новый язык (хотя и очень простой). Лично я не назвал бы что-либо специфичным для предметной области языком, который не имеет уникального синтаксиса или является лишь подмножеством языка общего назначения (вы можете увидеть некоторую поддержку этого в этом ответе на SO).
Ответ 5
Я не совсем понимаю вопрос. Ruby не является доменным языком, это язык общего назначения. Не имеет смысла называть это DSL, потому что это не одно. Поэтому вся суть вопроса не имеет смысла.