Architecture 用于将程序与实现隔离的自定义语言

Architecture 用于将程序与实现隔离的自定义语言,architecture,system,dsl,Architecture,System,Dsl,我想创建一个算法驱动的模拟 我正在尝试一种独特的设计方法,以创建一个更加独立和有序的软件系统 我的计划是以任意格式(比如我自己的脚本语言)定义程序中更抽象的层,然后创建一个简单的解释器 这将把格式转换成一个用传统高级编程语言编写的小程序可以处理的东西 我将在这个和一些中间件之间创建一个小的抽象层,以形成软件的基础。 这种方法的目标是使程序的更高层完全独立,甚至独立于用于实现它的编程语言 虽然这种方法在我看来是合理的;正如我所说,我对复杂的软件系统还不熟悉,所以这可能有一个巨大的缺陷,或者在实践中

我想创建一个算法驱动的模拟

  • 我正在尝试一种独特的设计方法,以创建一个更加独立和有序的软件系统
  • 我的计划是以任意格式(比如我自己的脚本语言)定义程序中更抽象的层,然后创建一个简单的解释器
  • 这将把格式转换成一个用传统高级编程语言编写的小程序可以处理的东西
  • 我将在这个和一些中间件之间创建一个小的抽象层,以形成软件的基础。
  • 这种方法的目标是使程序的更高层完全独立,甚至独立于用于实现它的编程语言
  • 虽然这种方法在我看来是合理的;正如我所说,我对复杂的软件系统还不熟悉,所以这可能有一个巨大的缺陷,或者在实践中有一个更好的技术
  • 这就是所谓的数字用户线(DSL)。DSL是一种强大的抽象技术。DSL被广泛使用,并且已经存在了很长时间

    马丁·福勒区分了两种情况。内部DSL是用其宿主语言编写的(因此必须符合该语言的语法)


    外部DSL具有自己的语法,不同于用于实现它的语言。编译器或解释器将外部DSL转换为另一种形式,或直接执行它。您所描述的是一个外部DSL。

    使程序的更高层完全独立
    ——但仍依赖于您的新语言(DSL)。当然,这是个好主意,你不是第一个。但在我看来,这太宽泛了,所以我投票决定结束。这太宽泛了,主要是基于意见。然而,我给了两分钱:这是用Java实现的。历史告诉我们,目前几乎不可能实现这种逻辑。目前的答案是创建一种特定于领域的语言。如果您的问题仍然存在于特定领域,那么DSL将是正确的方法。然而,问题是常见的。这就是为什么我们有设计模式。这意味着很有可能有人已经遇到了这个问题,并为此编写了一种语言。当然,你必须问:你所做的是解决问题吗?如果没有,你可能会在一些不太实用的东西上浪费时间——结果可能不值得投入时间。