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

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

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

【问题讨论】:

    标签: 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 “好”:

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

      【讨论】:

        【解决方案4】:

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

        【讨论】:

          【解决方案5】:

          我能想到的一些好的 ruby​​ DSL 是 hpricotsinatra

          【讨论】:

          • 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 示例。

          【讨论】:

            猜你喜欢
            • 2010-09-06
            • 2011-07-18
            • 2019-01-05
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多