Was ist datengesteuerte Programmierung?


89

Ich wurde bei der Arbeit beauftragt, einen detaillierten Konstruktionsplan für eine Logistikanwendung zu erstellen, die wir codieren, um sie einem Kunden vorzuschlagen. Mir wurde gesagt, dass es sich um eine datengesteuerte Anwendung handelt. Was bedeutet es für eine Anwendung, "datengesteuert" zu sein? Was ist das Gegenteil? Ich kann keine wirklich klare Antwort darauf bekommen, obwohl ich während der Websuche viele Leute sehen kann, die ihre eigenen Beispiele veröffentlichen. Jede Hilfe wäre sehr dankbar.


2
Fast jede reale Programmierung ist datengesteuert.
Martin Spamer

16
Der Klassiker The Art of Unix Programming bietet eine gute Diskussion zu diesem Thema: homepage.cs.uri.edu/~thenry/resources/unix_art/ch09s01.html . Hauptzitat: "Bei der datengesteuerten Programmierung sind die Daten nicht nur der Zustand eines Objekts, sondern definieren tatsächlich den Steuerungsfluss des Programms . Wenn das Hauptanliegen bei OO die Kapselung ist, ist das Hauptanliegen bei der datengesteuerten Programmierung das Schreiben so wenig fester Code wie möglich . "
FMc

2
Die Antwort von FMc ist für mich die überzeugendste Erklärung und sollte eine Antwort sein, aber ausgearbeitet.
Mads Skjern

Antworten:


93

Datengesteuertes Programmieren ist ein Programmiermodell, bei dem die Daten selbst den Programmfluss und nicht die Programmlogik steuern. Es ist ein Modell, bei dem Sie den Ablauf steuern, indem Sie dem Programm verschiedene Datensätze anbieten, bei denen die Programmlogik eine generische Form des Ablaufs oder von Statusänderungen ist.

Zum Beispiel, wenn Sie ein Programm mit vier Zuständen haben: UP - DOWN - STOP - START

Sie können dieses Programm steuern, indem Sie Eingaben (Daten) anbieten, die die Zustände darstellen:

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

Der Programmcode bleibt gleich, aber der Datensatz (der nicht dynamisch eingegeben, sondern statisch an den Computer übergeben wird) steuert den Ablauf.


3
Der Programmierteil schreibt / definiert die "generische Form des Flusses oder der Zustandsänderungen", habe ich Recht? Aber ich kann eine solche "Maschine" in jeder Sprache schreiben, und daran ist nichts Ungewöhnliches, so dass ich aus Ihrer Antwort nichts wirklich herausholen kann. Möglicherweise ist datengesteuertes Programmieren, wenn die Sprache selbst oder eine Bibliothek das Schreiben solcher Maschinen fördert oder sehr einfach macht. Oder vielleicht ist die Definition, dass die Sprache / Bibliothek die Maschinen deklarativ definiert, dh nicht prozedural.
Mads Skjern

2
Auf en.wikipedia.org/wiki/Data-driven_programming verwenden sie AWK als Beispiel. In AWK werden zwei Dinge bereitgestellt, ein Ausdruck, der definiert, was mit den Daten zu tun ist, und die Daten selbst. Was ist der Ausdruck, der definiert, was passieren soll? 1) die Programmierung oder 2) Daten. Wenn es sich um Daten handelt, handelt es sich bei der Programmierung um die Maschine von AWK selbst, die im Beispiel von AWK natürlich statisch ist. In anderen Kontexten, z. B. wenn die Maschine selbst auf herkömmliche Weise geschrieben wird, ist dies allein der Programmierteil.
Mads Skjern

Wenn also leistungsfähigere Beispiele für die Programmierung von Datenlaufwerken vollständig sind, wird dies nicht einfach zu einer Include-Anweisung in einer Engine mit einigen vorgefertigten Annahmen und Tools?
ZirconCode

53

Obwohl es nicht nur einige Ideen gibt, was datengesteuerte Programmierung ist, möchte ich ein Beispiel geben, das eine Datenstruktur und eine Funktion verwendet.

Nicht datengesteuertes Beispiel:

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

Datengesteuertes Beispiel:

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

Im ersten Beispiel liegt die Entscheidung, das eine oder andere Ergebnis anzuzeigen, in der Codelogik. Im letzten Beispiel wird die Ausgabe durch die Daten bestimmt, die an die Funktion übergeben werden. Aus diesem Grund wird die Ausgabe von den Daten "gesteuert".


3
Ich weiß, dass dies ein einfaches Beispiel ist, aber das nicht datengesteuerte Beispiel sieht aus wie ein Beispiel für schlampige Codierung. Bedeutet datengesteuert nur gute Codierungspraktiken? Wenn ja, warum sollte jemand einen nicht datengesteuerten Ansatz verfolgen wollen?
Jin

4
Es tut mir leid, aber das erste Beispiel sieht aus wie funktionale Programmierung (wo Daten und Verhalten entkoppelt sind), und das zweite Beispiel sieht aus wie objektorientiert (wo Daten und Verhalten gekoppelt sind).
Vakey

47

"Mir wurde gesagt, dass es sich um eine datengesteuerte Anwendung handelt" - Sie müssen fragen, wer Ihnen das gesagt hat.

Sie möchten hier keine plausible Antwort lesen und dann herausfinden, dass es überhaupt nicht das ist, was die für Ihr Projekt verantwortliche Person gemeint hat. Der Satz ist zu vage, um eine eindeutige Bedeutung zu haben, die definitiv für Ihr Projekt gilt.


8
Ich verstehe, was du meinst, Richie, und das ist ein guter Punkt. Ich habe mich jedoch gefragt, ob "datengesteuerte Programmierung" ein Begriff ist, der von der Softwareentwicklungsbranche konkret anerkannt wird. Ich werde hier keine Antwort einfach zum Nennwert annehmen, ohne mich bei meinem Chef zu erkundigen. -Danke :)
jtbradle

5
Sicher - Sie hatten Recht, hier zu fragen. Aber ich denke, die Antwort ist, dass es keine allgemein akzeptierte Definition gibt.
RichieHindle

Wie heißt es, wenn Sie Ihre UX aus Metadaten generieren? Wie heißt es, wenn Ihr Workflow von einer externen Konfiguration gesteuert wird? Ist das datengesteuerte Architektur und ereignisgesteuerte Architektur? Wäre die datengesteuerte Programmierung eher mit WSDL und GraphQL vergleichbar, wo Ihre Modelle generiert werden, Sie aber trotzdem gegen sie codieren, wie Sie es für richtig halten?
Corey Alix

14

Datengesteuerte Entwicklung ist etwas, das man an der Logik des Programms ändern kann, indem man nicht den Code, sondern die Datenstruktur bearbeitet.

Weitere Informationen zur datengesteuerten Programmierung finden Sie unter http://www.faqs.org/docs/artu/ch09s01.html

Verfahrensprogrammierung

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

Datengesteuerte Programmierung

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

Datengesteuerte Anwendung ist:

(1) ein Satz von Regeln, die unterschiedliche Datensätze akzeptieren, um eine vorbestimmte Entscheidung für jeden spezifischen Datensatz zu treffen und das Ergebnis als Ergebnis zu werfen

(2) einige vorgegebene Prozesse, die basierend auf dem Ergebnis ausgelöst werden.

Perfektes Beispiel ist ifttt.com

Die Anwendung hat nichts als Regeln. Was es nützlich macht, sind die Daten, die durch es fließen.



1

Es ist niemand bei der Arbeit, der Ihnen bei dieser Frage helfen kann? Es ist sehr schwer zu visualisieren, ohne was Sie arbeiten, ohne ein besseres Beispiel. Aber soweit ich weiß, wird es ein Programm sein, in das sie hauptsächlich Informationen eingeben. Dadurch können Informationen abgerufen und bearbeitet werden, die der Kunde verwalten muss.

Viel Glück!!


1

Ich denke, die gegebenen Ratschläge sind nicht schlecht, aber ich habe immer daran gedacht, dass sich Data Driven Design darauf konzentriert, vorhandene oder gegebene Datenstrukturen als Grundlage für Ihre Domänenobjekte zu verwenden.

Beispielsweise kann das klassische Verkäuferverwaltungsprogramm die folgende Typstruktur von Tabellen aufweisen:

  • Verkäufer
  • Region
  • Kunden
  • Produkte

Ihre Anwendung würde sich also auf die Verwaltung dieser Datenstrukturen konzentrieren, anstatt eine direkte API zu verwenden, die Dinge wie "Verkauf machen" usw.

Nur meine Meinung, wie die anderen Antworten vermuten lassen;)

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.