【问题标题】:Do well thought out method/function names create a DSL?深思熟虑的方法/函数名称是否创建了 DSL?
【发布时间】:2009-02-10 21:38:24
【问题描述】:

我在想,方法名称和它们的调用似乎在你的代码中创建了一个 DSL,通过包装通用的东西并为你想要实现的目标适当地命名它。

你知道,所以很容易理解以下的含义

if (a.isSubReportOf(b) || b.isSubReportOf(a)) {
    // do stuff
}

但是方法中的代码如果不研究它可能真的很难解释。

我知道人们有时会认为整个 DSL 有什么特别之处 - 我们是否一直在代码中创建它们?

【问题讨论】:

    标签: function methods dsl


    【解决方案1】:

    我认为您指的是 Martin Fowler(也许还有其他人)所说的内部 DSL。阅读this

    【讨论】:

      【解决方案2】:

      您可以交替询问是否应该将 DSL 替换为经过深思熟虑的类、变量和方法名称。我总是把这与 Kent Beck 联系起来,因为他一直是“编写读起来像诗一样的代码”的支持者。

      正在发明领域词汇,将业务操作的语法制作成对象、方法和变量。对我来说听起来 DSL'ish ;)

      【讨论】:

        【解决方案3】:

        这取决于您对 DSL 的定义,但对我来说,是的,我会这么说。 DDD 是关于创建抽象的,它允许您拥有一种无处不在的语言并在更高级别上对概念进行推理。有些人可能会争辩说它本身不是 DSL,但更重要的问题是,像这样的代码是关于域的推理吗?

        我会说是的,这才是真正重要的。

        【讨论】:

          【解决方案4】:

          你能在足够复杂或简单的情况下一个接一个地替换吗?是的

          它们是一样的吗?一点也不。

          每个都有优点和缺点,这完全取决于需要什么。如果您需要在运行时对其进行修改,那么在编译语言中使用函数可能不是最好的解决方案(尽管它仍然是可能的),因为它对您的需求来说太重了。

          DSL 的目标是确定您的需求并制作一种只包含这些需求的语言,以便尽可能简单地表示。这样一来,我们有限的大脑就可以轻松地想象数据是什么,而无需编译程序。

          另外,一个足够简单的 DSL 可以很容易地被另一个程序解析和编辑。毕竟语法是你自己写的,封装在一个库里吧?

          在你上面的例子中:

          a.isSubReportOf(b) || b.isSubReportOf(a)
          

          在精神上还是比说更难把握:

          a <-> b 
          

          【讨论】:

            猜你喜欢
            • 2013-06-12
            • 1970-01-01
            • 1970-01-01
            • 2011-04-27
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多