データ駆動プログラミングとは何ですか?


92

私は、顧客に提案するためにコーディングしているロジスティクスアプリケーションの詳細なエンジニアリング計画を作成する仕事を任されています。データ駆動型のアプリケーションだと言われています。アプリケーションが「データ駆動型」であるとはどういう意味ですか?反対は何ですか?ウェブ検索中に多くの人が自分の例を投稿しているのを見ることができますが、私はこれについて本当に明確な答えを得ることができないようです。どんな助けでも大歓迎です。


2
ほとんどすべての実際のプログラミングはデータ駆動型です。
Martin Spamer 2012年

16
古典的なTheArt of Unix Programmingには、このトピックに関する優れた議論があります:homepage.cs.uri.edu/~thenry/resources/unix_art/ch09s01.html。重要な引用:「データ駆動プログラミングでは、データは単にオブジェクトの状態であるだけでなく、実際にプログラムの制御フローを定義します。オブジェクト指向の主な関心事がカプセル化である場合、データ駆動プログラミングの主な関心事は書き込みです。できるだけ少ない固定コード。」
FMc 2013

2
FMcの答えは私にとって最も説得力のある説明であり、答えになるはずですが、詳しく説明されています。
Mads Skjern 2015年

回答:


94

データ駆動型プログラミングは、データ自体がプログラムロジックではなく、プログラムのフローを制御するプログラミングモデルです。これは、プログラムロジックがフローまたは状態変化の一般的な形式であるプログラムにさまざまなデータセットを提供することによってフローを制御するモデルです。

たとえば、次の4つの状態を持つプログラムがある場合:UP-DOWN-STOP-START

状態を表す入力(データ)を提供することにより、このプログラムを制御できます。

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

プログラムコードは同じままですが、データセット(動的入力タイプではなく、コンピューターに静的に与えられる)がフローを制御します。


3
プログラミングの部分は、「フローまたは状態変化の一般的な形式」を記述/定義しています、私は正しいですか?しかし、私はそのような「機械」をどの言語でも書くことができ、それについては珍しいことは何もないので、私はあなたの答えから実際には何も得られません。おそらく、データ駆動プログラミングは、言語自体またはライブラリが、そのようなマシンの作成を非常に簡単に奨励または可能にする場合です。あるいは、言語/ライブラリが宣言的な方法で、つまり手続き型ではなく、マシンを定義しようという定義かもしれません。
Mads Skjern 2015年

2
en.wikipedia.org/wiki/Data-driven_programming、彼らは一例として、AWKを使用しています。AWKでは、データをどのように処理するかを定義する式と、データ自体の2つが提供されます。何が起こるかを定義する式は、1)プログラミング、または2)データと見なされます。データと見なされる場合、プログラミングはAWKのマシン自体であり、もちろんAWKの例では静的です。しかし、他のコンテキストでは、たとえば、マシン自体を従来の手順で作成する場合、それだけがプログラミングの部分になります。
Mads Skjern 2015年

それで...より強力なデータドライブプログラミングの例が完全にチューリングしていると仮定すると、これはいくつかの事前に構築された仮定とツールを備えたエンジンの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
申し訳ありませんが、最初の例は関数型プログラミング(データと動作が分離されている)のように見え、2番目の例はオブジェクト指向(データと動作が結合されている)のように見えます。
Vakey 2018年

47

「それはデータ駆動型アプリケーションだと言われました」-あなたはそれを言った人に尋ねる必要があります。

ここでもっともらしい答えを読んで、それがあなたのプロジェクトの責任者が意図したものではないことに気付くのは嫌です。このフレーズは曖昧すぎて、プロジェクトに確実に当てはまる明確な意味を持つことはできません。


8
私はあなたがリッチーの意味を理解しています、そしてそれは良い点です。しかし、「データ駆動プログラミング」は、ソフトウェア開発業界で具体的に認識されている用語なのだろうかと思いました。上司に確認せずに、ここから単純に額面通りに答えることはしません。
jtbradle 2009年

5
確かに-あなたはここで尋ねるのが正しかった。しかし、その答えは、普遍的に受け入れられている定義はないということだと思います。
RichieHindle 2009年

メタデータから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です

アプリケーションにはルールしかありません。それを有用にするのは、それを流れるデータです。


4

この記事では、私がこの用語の意味を理解していることを最も明確に説明しています。

テーブル駆動プログラミングとデータ駆動プログラミングとは何ですか? http://www.paragoncorporation.com/ArticleDetail.aspx?ArticleID=31

データ/テーブル駆動型プログラミングは、反復的なプログラミング構造をデータと変換パターンにファクタリングする手法です。この新しいデータは、この方法で使用される場合、純粋主義者によってメタデータと呼ばれることがよくあり ます。


1

この質問を手伝ってくれる人は誰もいませんか?より優れた例がなければ、作業内容を視覚化することは非常に困難です。しかし、私が収集したものから、それは彼らが主に情報を入力するプログラムになるでしょう。これにより、顧客が管理する必要のある情報を取得および編集できるようになります。

頑張ってください!


1

与えられたアドバイスは悪くないと思いますが、データ駆動型設計は、既存または与えられたデータ構造をドメインオブジェクトの基盤として使用することを中心に展開していると常に考えてきました。

たとえば、従来の営業担当者管理プログラムには、次のタイプのテーブル構造があります。

  • 営業担当者
  • 領域
  • お客様
  • 製品

したがって、アプリケーションは、「販売を行う」などのような単純なAPIを使用するのではなく、これらのデータ構造の管理を中心に行うことになります。

他の答えが示唆するようにちょうど私の意見;)

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.