Ruby DSL(领域特定语言)存储库,示例

Posted

技术标签:

【中文标题】Ruby DSL(领域特定语言)存储库,示例【英文标题】:Ruby DSL (Domain Specific Language) repositories, examples 【发布时间】:2009-05-22 19:48:04 【问题描述】:

我正在寻找 Ruby DSL(领域特定语言)的优秀示例。您知道哪些存储库、项目值得一读?为什么它(或:它们是)很好的例子?

我对经过深思熟虑和设计的更复杂的示例特别感兴趣。

【问题讨论】:

【参考方案1】:

Rake 和 Rack 是 DSL 的一些很好的例子。如果您想要更多示例,请查看以下内容:

Sinatra 是一种非常流行的用于构建 Web 应用程序的 DSL,它在 GitHub 上是开源的。 Twibot 是受 Sinatra 启发的较新 DSL,可让您创建自动响应消息和回复的 Twitter 机器人。

如果您想开始自己制作,这里有一个名为 Building a DSL in Ruby 的优秀教程。

【讨论】:

Twibot 是一个有趣的发现,我会看看。谢谢!【参考方案2】:

在行为驱动开发领域,您可以查看:

Cucumber - 使用场景描述 BDD RSpec - 用指定的行为替换测试代码。

虽然我不得不承认 RSpec 代码有时让我摸不着头脑,因为我还是个新手。

【讨论】:

【参考方案3】:

当然,另一个例子是Rake,Ruby 构建系统。在我看来,是什么让 DSL “好”:

    符号符合意义,即,如果您阅读 DSL 中的一个句子(语句),您就会对它的作用有一个清晰、明确的概念。 特定领域,即 DSL 不能解决宇宙中的所有问题,而是专注于一个小领域(例如构建软件、查询数据或构建 UI) 高级抽象。 DSL 使用程序员可以使用的高级概念,并将这些概念转换为较低级别的实现(内部)。在 Rake 的情况下,该语言所基于的主要概念是任务和它们之间的依赖关系。

【讨论】:

【参考方案4】:

您是否查看过Docile gem,它可能是满足您需求的最简单、最干净的方式?

【讨论】:

【参考方案5】:

我能想到的一些好的 ruby​​ DSL 是 hpricot 和 sinatra

【讨论】:

sinatra 的结构非常好。听说过但没看过。谢谢提醒。【参考方案6】:

Ruby on Rails 的 Active Record 是 DSL!

http://apidock.com/rails/ActiveRecord/Base

另外,这一集代码学校可能会很有趣,因为它会导致构建 DSL(我了解到 Active Record 是 DSL)

http://www.codeschool.com/courses/ruby-bits-part-2

上述课程还讨论了外部和内部 DSL。 Cucumber 是一个外部 DSL 示例,您需要在其中构建解析器和编译器等。Active Record 是在一些现有代码中运行的内部 DSL 示例。

【讨论】:

以上是关于Ruby DSL(领域特定语言)存储库,示例的主要内容,如果未能解决你的问题,请参考以下文章

DSL-领域特定语言(英语:domain-specific languageDSL)

DSL的概念

您将如何在 Ruby 中设计这样的 DSL?

Groovy 与 DSL

podfile文件用到的Ruby语言的学习和使用

podfile文件用到的Ruby语言的学习和使用