什么是数据驱动编程?

jtb*_*dle 84 data-driven

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

noj*_*ive 89

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

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

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

  • set1:DOWN - STOP - START - STOP - UP - STOP
  • set2:UP - DOWN - UP - DOWN

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

  • 编程部分正在编写/定义"流程或状态变化的通用形式",对吗?但是我可以用任何语言编写这样一个"机器",并没有什么不寻常的,所以我没有从你的答案中得到任何结论.也许数据驱动编程是指语言本身或库,鼓励或使编写此类机器变得非常容易.或者也许定义是语言/库让我们以声明的方式定义机器,即不是程序性的. (2认同)
  • 在https://en.wikipedia.org/wiki/Data-driven_programming上,他们使用AWK作为示例.在AWK中,提供了两个东西,一个定义数据要做什么的表达式,以及数据本身.什么是定义要发生的事情的表达式:1)编程,或2)数据.如果它被认为是数据,则编程是AWK的机器本身,当然在AWK的例子中是静态的.但在其他情况下,例如,如果以某种传统的程序方式编写机器本身,那就是编程部分. (2认同)

Llo*_*ore 52

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

非数据驱动示例:

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
Run Code Online (Sandbox Code Playgroud)

数据驱动示例:

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

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

  • 我知道这是一个简单的例子,但非数据驱动的例子看起来就像是一个草率编码的例子.数据驱动只是意味着良好的编码实践吗?如果是这样,为什么有人想要采用非数据驱动的方法呢? (3认同)
  • 抱歉,第一个示例看起来像函数式编程(其中数据和行为是分离的),第二个示例看起来像面向对象(其中数据和行为是耦合的)。 (2认同)

Ric*_*dle 45

"我被告知这是一个数据驱动的应用程序" - 你需要问谁告诉你.

你不想在这里阅读一些看似合理的答案,然后发现你的项目负责人根本不是什么意思.这句话太含糊,没有明确的含义,肯定会适用于你的项目.

  • 我明白你的意思是里奇,这是一个好点.但是,我想知道"数据驱动编程"是否是软件开发行业具体认可的某种术语.我不会在这里简单地从表面上看到任何答案而不与老板核实.-谢谢 :) (8认同)
  • 当然 - 你在这里问你是对的.但我认为答案是没有普遍接受的定义. (5认同)

Fua*_*DEN 13

数据驱动开发是一种可以通过编辑而不是编码而不是数据结构来改变程序逻辑的东西.

您可以在http://www.faqs.org/docs/artu/ch09s01.html上找到有关数据驱动编程的更多信息

程序编程

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;
    }
}
Run Code Online (Sandbox Code Playgroud)

数据驱动编程

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]);
}
Run Code Online (Sandbox Code Playgroud)

  • @delrocco 感谢您注意到死链接!以后,您可以到[互联网档案馆](http://web.archive.org/)查找此类网页的旧副本。我已经使用它恢复了这篇文章的链接。 (2认同)

小智 7

数据驱动应用程序是:

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

(2)基于结果触发的一些预定过程.

完美的例子是ifttt.com

该应用程序只有规则.它有用的是流经它的数据.


Rob*_*vey 5

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

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

数据/表驱动编程是将重复的编程结构分解为数据和转换模式的技术。当以这种方式使用时,这种新数据通常被纯粹主义者称为 元数据