【问题标题】:What is data-driven programming?什么是数据驱动编程?
【发布时间】:2010-11-07 03:01:26
【问题描述】:

我的工作任务是为我们正在编码的物流应用程序编写详细的工程计划,以向客户提出建议。有人告诉我这是一个数据驱动的应用程序。应用程序“数据驱动”意味着什么?什么是相反的?我似乎无法得到任何真正明确的答案,尽管在网络搜索时我可以看到很多人发布他们自己的例子。任何帮助将不胜感激。

【问题讨论】:

  • 几乎所有现实世界的编程都是数据驱动的。
  • 经典的Unix 编程艺术 很好地讨论了这个话题:homepage.cs.uri.edu/~thenry/resources/unix_art/ch09s01.html。关键引语:“在数据驱动的编程中,数据不仅仅是某个对象的状态,而是实际上定义了程序的控制流。在面向对象的主要关注点是封装的地方,主要关注点在数据驱动编程中是尽可能少地编写固定代码。”
  • FMc的回答对我来说是最有说服力的解释,应该是一个答案,但是详细说明了。

标签: data-driven


【解决方案1】:

数据驱动开发是一种可以改变 程序的逻辑不是编辑代码而是编辑数据结构。

您可能会发现更多关于数据驱动编程的信息here

过程式编程

var data = { 
            {do:'add',arg:{1,2}},
            {do:'subtract',arg:{3,2}},
            {do:'multiply',arg:{5,7}},
            };

foreach(var item in data){  
    switch(item.do){
        case 'add':
            console.log(item.arg[0] + item.arg[1]);
        break;
        case 'subtract':
            console.log(item.arg[0] - item.arg[1]);
        break;
        case 'multiply':
            console.log(item.arg[0] * item.arg[1]);
        break;
    }
}

数据驱动编程

var data = { 
            {do:'+',arg:{1,2}},
            {do:'-',arg:{3,2}},
            {do:'*',arg:{5,7}},
            };

foreach(var item in data){      
    console.log(eval (item.arg[0] + item.do + item.arg[1]);
}

【讨论】:

  • @delrocco 感谢您注意到死链接!以后可以去Internet Archive找这样的旧网页。我已经使用它恢复了这篇文章的链接。
【解决方案2】:

数据驱动的应用是:

(1) 一组规则,接受不同的数据集,为每个特定的数据集做出预先确定的决定,并抛出结果作为结果

(2) 根据结果触发的几个预定过程。

ifttt.com 就是一个完美的例子

应用程序只有规则。 它的有用之处在于流经它的数据。

【讨论】:

    【解决方案3】:

    我认为给出的建议还不错,但我一直认为数据驱动设计围绕使用现有或给定的数据结构作为域对象的基础展开。

    例如,经典的销售人员管理程序可能具有以下类型的表结构:

    • 销售员
    • 地区
    • 客户
    • 产品

    因此,您的应用程序将以管理这些数据结构为中心,而不是采用直接的 API 来执行诸如“销售”之类的操作...

    只是我的意见,正如其他答案所暗示的那样;)

    【讨论】:

      【解决方案4】:

      虽然关于什么是数据驱动编程有很多想法,但请允许我举一个使用数据结构和函数的示例。

      非数据驱动示例:

      data_lloyd = {'name': 'Lloyd', 'lives': 'Alcoy }
      data_jason = {'name': 'Jason', 'lives': 'London' }
      go = function(x) 
          if x.name == 'Lloyd' 
          then 
              print("Alcoy, Spain") 
          else 
              print("London, UK") 
      end
      

      数据驱动示例:

      data_lloyd = {'name': 'Lloyd', 'lives': function(){ print("Alcoy, Spain") }
      data_jason = {'name': 'Jason', 'lives': function(){ print("London, UK") }
      go = function(x)
          x.lives()
      end
      

      在第一个示例中,显示一个结果或另一个结果的决定在于代码逻辑。 在最后一个示例中,输出由传递给函数的数据决定,因此我们说输出是由数据“驱动”的。

      【讨论】:

      • 我知道这是一个简单的例子,但非数据驱动的例子看起来就像一个草率编码的例子。数据驱动是否意味着良好的编码实践?如果是这样,为什么会有人想要采用非数据驱动的方法?
      • 对不起,第一个例子看起来像函数式编程(数据和行为解耦),第二个例子看起来像面向对象(数据和行为耦合)。
      【解决方案5】:

      数据驱动编程是一种编程模型,其中数据本身控制程序的流程,而不是程序逻辑。它是一种模型,您可以通过向程序提供不同的数据集来控制流程,其中程序逻辑是某种通用形式的流程或状态更改。

      例如,如果您的程序有四种状态:UP - DOWN - STOP - START

      您可以通过提供代表状态的输入(数据)来控制该程序:

      • set1:向下 - 停止 - 开始 - 停止 - 向上 - 停止
      • set2:上 - 下 - 上 - 下

      程序代码保持不变,但数据集(不是动态输入类型,而是静态提供给计算机)控制流程。

      【讨论】:

      • 编程部分正在编写/定义“流或状态变化的通用形式”,对吗?但是我可以用任何语言编写这样的“机器”,这并没有什么不寻常的地方,所以我真的没有从你的回答中得到任何东西。也许数据驱动编程是语言本身或库鼓励或使编写此类机器变得非常容易。或者也许定义是语言/库让我们以声明的方式定义机器,即不是程序。
      • en.wikipedia.org/wiki/Data-driven_programming 上,他们以AWK 为例。在 AWK 中提供了两件事,一个定义要对数据做什么的表达式,以及数据本身。定义要发生的事情的表达式是什么:1)编程,或 2)数据。如果它被认为是数据,那么编程就是AWK的机器本身,这在AWK的例子中当然是静态的。但在其他情况下,例如,如果以某种传统的程序方式编写机器本身,那仅是编程部分。
      • 所以...假设更强大的数据驱动编程示例已经完成,这不是简单地成为具有一些预先构建的假设和工具的引擎中的包含语句吗?
      【解决方案6】:

      这篇文章最清楚地解释了我对这个词的理解:

      什么是表驱动和数据驱动编程? http://www.paragoncorporation.com/ArticleDetail.aspx?ArticleID=31

      数据/表驱动编程是 重复分解技术 将结构编程到数据和 转变模式。这个新数据 通常被纯粹主义者称为 meta-data 以这种方式使用时。

      【讨论】:

        【解决方案7】:

        工作中没有人可以帮助您解决这个问题吗?如果没有更好的例子,很难想象你在做什么。但据我所知,这将是一个他们主要输入信息的程序。这将能够检索和编辑客户需要管理的信息。

        祝你好运!!

        【讨论】:

          【解决方案8】:

          “有人告诉我这是一个数据驱动的应用程序”——你需要问问是谁告诉你的。

          您不想在这里阅读一些似是而非的答案,然后发现这根本不是您项目负责人的意思。这个短语太模糊了,没有明确的含义,肯定会适用于您的项目。

          【讨论】:

          • 我明白你的意思里奇,这是一个很好的观点。但是,我想知道“数据驱动编程”是否是软件开发行业具体认可的某种术语。如果不与我的老板核对,我不会在这里简单地从这里接受任何答案。 -谢谢:)
          • 当然 - 你在这里问是对的。但我认为答案是没有普遍接受的定义。
          • 从元数据生成用户体验时它叫什么?当您的工作流程由外部配置控制时,它叫什么?那是数据驱动架构和事件驱动架构吗?数据驱动编程会更类似于生成模型的 WSDL 和 GraphQL,但您仍然可以根据自己认为合适的方式编写代码?
          猜你喜欢
          • 2011-04-23
          • 2012-05-06
          • 1970-01-01
          • 2018-12-21
          • 1970-01-01
          • 1970-01-01
          • 2010-12-12
          • 1970-01-01
          相关资源
          最近更新 更多