什么是数据驱动编程?


92

我的工作是为物流应用编写详细的工程计划,我们正在编写该计划以提议给客户。有人告诉我这是一个数据驱动的应用程序。应用程序是“数据驱动的”是什么意思?恰恰相反?尽管在进行网络搜索时,我看到很多人都在张贴自己的示例,但我似乎对此没有任何明确的答案。任何帮助将不胜感激。


2
几乎所有现实世界的编程都是数据驱动的。
马丁·斯帕默

16
经典的《 Unix编程艺术》对此主题进行了很好的讨论:homepage.cs.uri.edu/~thenry/resources/unix_art/ch09s01.html。关键语录:“在数据驱动的编程中,数据不仅是某个对象的状态,而且实际上定义了程序的控制流。在面向对象的主要关注是封装的情况下,数据驱动的编程主要关注的是写尽可能少的固定代码。”
FMc

2
FMc的答案对我来说是最令人信服的解释,应该是一个答案,但要详尽阐述。
Mads Skjern

Answers:


94

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

例如,如果您的程序具有四个状态:上-下-停止-开始

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

  • set1:向下-停止-启动-停止-向上-停止
  • set2:上-下-上-下

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


3
编程部分正在编写/定义“流或状态更改的通用形式”,对吗?但是我可以用任何语言编写这样的“机器”,并且这没有什么不寻常的,所以我从您的答案中并没有得到任何帮助。也许数据驱动的编程就是语言本身或库鼓励或使编写此类机器非常容易的时候。或可能的定义是,语言/库让我们以声明性的方式定义机器,即不是过程性的。
Mads Skjern

2
en.wikipedia.org/wiki/Data-driven_programming上,他们以AWK为例。在AWK中提供了两件事:一个表达式,定义要对数据进行的操作以及数据本身。定义发生什么的表达式是什么:1)编程,或2)数据。如果将其视为数据,则编程是AWK的机器本身,当然在AWK的示例中,它是静态的。但是在其他情况下,例如,如果以某种传统的程序方式编写机器本身,那么这本身就是编程的一部分。
Mads Skjern

因此...假设更强大的数据驱动器编程示例已经完成,这是否不只是成为具有一些预先构建的假设和工具的引擎中的include语句?
ZirconCode

54

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

非数据驱动示例:

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

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


3
我知道这是一个简单的示例,但是非数据驱动的示例看起来像是草率编码的示例。数据驱动是否意味着良好的编码习惯?如果是这样,为什么会有人想采用非数据驱动的方法呢?

4
抱歉,第一个示例看起来像函数式编程(其中数据和行为是分离的),第二个示例看起来像面向对象(其中数据和行为是耦合的)。
Vakey

47

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

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


8
我理解您的意思是Richie,这很重要。但是,我想知道“数据驱动程序设计”是否是软件开发行业具体认可的某种术语。如果不与老板核对,我将不会从这里直接获得任何答案。-谢谢:)
jtbradle

5
当然-您在这里问是对的。但是我认为答案是没有公认的定义。
RichieHindle

从元数据生成UX时,这叫什么?当您的工作流程由外部配置控制时,这叫什么?那是数据驱动架构和事件驱动架构吗?数据驱动编程会更类似于生成模型的WSDL和GraphQL,但仍然可以对它们进行编码,但您认为合适吗?
Corey Alix

15

数据驱动的开发可以通过不编辑代码,而是编辑数据结构来更改程序的逻辑。

您可能会在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;
    }
}

数据驱动编程

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]);
}

7

数据驱动的应用程序是:

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

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

ifttt.com是一个很好的例子

该应用程序仅包含规则。使之有用的是将流经它的数据。



1

没有人可以帮助您解决这个问题?如果没有更多示例,很难形象化您的工作。但是从我的角度来看,这将是一个他们主要将信息输入到其中的程序。这样就可以检索和编辑客户需要管理的信息。

祝你好运!


1

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

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

  • 营业员
  • 地区
  • 顾客
  • 产品展示

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

其他答案表明我的意见;)

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.