Cos'è la programmazione basata sui dati?


92

Sono stato incaricato al lavoro di scrivere un piano ingegneristico dettagliato per un'applicazione logistica che stiamo programmando per proporre a un cliente. Mi è stato detto che si tratta di un'applicazione basata sui dati. Cosa significa per un'applicazione essere "data-driven"? Qual è il contrario? Non riesco a ottenere una risposta davvero chiara per questo, anche se durante la ricerca sul Web posso vedere molte persone che pubblicano i propri esempi. Qualsiasi aiuto sarebbe molto apprezzato.


2
Praticamente tutta la programmazione del mondo reale è basata sui dati.
Martin Spamer

16
Il classico The Art of Unix Programming ha una buona discussione su questo argomento: homepage.cs.uri.edu/~thenry/resources/unix_art/ch09s01.html . Citazione chiave: "Nella programmazione basata sui dati, i dati non sono semplicemente lo stato di un oggetto, ma in realtà definiscono il flusso di controllo del programma . Dove la preoccupazione principale in OO è l'incapsulamento, la preoccupazione principale nella programmazione basata sui dati è la scrittura il minor numero di codice fisso possibile . "
FMc

2
La risposta di FMc è per me la spiegazione più convincente, e dovrebbe essere una risposta, ma elaborata.
Mads Skjern

Risposte:


94

La programmazione basata sui dati è un modello di programmazione in cui i dati stessi controllano il flusso del programma e non la logica del programma. È un modello in cui controlli il flusso offrendo diversi set di dati al programma in cui la logica del programma è una forma generica di flusso o di cambiamenti di stato.

Ad esempio, se si dispone di un programma che ha quattro stati: SU - GIÙ - STOP - AVVIO

È possibile controllare questo programma offrendo input (dati) che rappresentano gli stati:

  • set1: GIÙ - STOP - START - STOP - SU - STOP
  • set2: SU - GIÙ - SU - GIÙ

Il codice del programma rimane lo stesso ma il set di dati (che non è di un tipo di input dinamico ma staticamente fornito al computer) controlla il flusso.


3
La parte di programmazione è scrivere / definire la "forma generica di flusso o di cambio di stato", giusto? Ma posso scrivere una simile "macchina" in qualsiasi lingua, e non c'è niente di insolito in questo, quindi non ottengo davvero nulla dalla tua risposta. Forse la programmazione data-driven è quando il linguaggio stesso o una libreria, incoraggia o rende molto facile scrivere tali macchine. O forse la definizione è che il linguaggio / libreria consente di definire le macchine in modo dichiarativo, cioè non procedurale.
Mads Skjern

2
Su en.wikipedia.org/wiki/Data-driven_programming , usano AWK come esempio. In AWK vengono fornite due cose, un'espressione che definisce cosa fare con i dati e i dati stessi. Qual è l'espressione che definisce ciò che deve accadere considerato: 1) la programmazione, o 2) dati. Se sono considerati dati, la programmazione è la macchina stessa di AWK, che ovviamente nell'esempio di AWK è statica. Ma in altri contesti, ad esempio se si scrive la macchina stessa in qualche modo procedurale tradizionale, questa è la parte di programmazione.
Mads Skjern

Quindi ... supponendo che esempi di programmazione di unità dati più potenti siano completi, questo non diventa semplicemente un'istruzione include in un motore con alcuni presupposti e strumenti predefiniti?
ZirconCode

54

Sebbene ci siano più di poche idee su cosa sia la programmazione guidata dai dati, consentitemi di fornire un esempio utilizzando una struttura dati e una funzione.

Esempio non basato sui dati:

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

Esempio basato sui dati:

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

Nel primo esempio la decisione di mostrare un risultato o l'altro è nella logica del codice. Nell'ultimo esempio l'output è determinato dai dati che vengono passati alla funzione e per questo motivo diciamo che l'output è "guidato" dai dati.


3
So che questo è un semplice esempio, ma l'esempio non basato sui dati sembra solo un esempio di codifica sciatta. Data-driven significa solo buone pratiche di codifica? In tal caso, perché qualcuno dovrebbe voler perseguire un approccio non basato sui dati?
Jin il

4
Mi dispiace, ma il primo esempio sembra una programmazione funzionale (dove dati e comportamento sono disaccoppiati), e il secondo esempio sembra orientato agli oggetti (dove dati e comportamento sono accoppiati).
Vakey

47

"Mi è stato detto che si tratta di un'applicazione basata sui dati" - devi chiedere a chi te lo ha detto.

Non vuoi leggere qui qualche risposta plausibile e poi scoprire che non è affatto ciò che intendeva la persona responsabile del tuo progetto. La frase è troppo vaga per avere un significato univoco che si applicherà sicuramente al tuo progetto.


8
Capisco cosa intendi Richie, e questo è un buon punto. Tuttavia, mi chiedevo se "programmazione basata sui dati" fosse una sorta di termine concretamente riconosciuto dall'industria dello sviluppo software. Non prenderò nessuna risposta da qui semplicemente per il valore nominale qui senza controllare con il mio capo. -Grazie :)
jtbradle

5
Certo, hai fatto bene a chiedere qui. Ma penso che la risposta sia che non esiste una definizione universalmente accettata.
RichieHindle

Come si chiama quando generi la tua UX da metadati? Come si chiama quando il flusso di lavoro è controllato da una configurazione esterna? Quella è architettura basata sui dati e architettura basata sugli eventi? La programmazione basata sui dati sarebbe più simile a WSDL e GraphQL in cui vengono generati i tuoi modelli ma continui a codificare contro di essi come ritieni opportuno?
Corey Alix

15

Lo sviluppo guidato dai dati è qualcosa che si può apportare modifiche alla logica del programma modificando non il codice ma la struttura dei dati.

È possibile trovare ulteriori informazioni sulla programmazione basata sui dati su http://www.faqs.org/docs/artu/ch09s01.html

Programmazione procedurale

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

Programmazione guidata dai dati

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

L'applicazione basata sui dati è:

(1) un insieme di regole che accettano diversi set di dati per prendere una decisione predeterminata per ogni specifico set di dati e lanciare il risultato come risultato

(2) alcuni processi predeterminati che vengono attivati ​​in base al risultato.

Un esempio perfetto è ifttt.com

L'applicazione non ha altro che regole. Ciò che lo rende utile sono i dati che fluiranno attraverso di esso.


4

Questo articolo spiega più chiaramente cosa intendo con il termine:

Che cos'è la programmazione basata su tabella e basata sui dati? http://www.paragoncorporation.com/ArticleDetail.aspx?ArticleID=31

La programmazione basata su dati / tabelle è la tecnica per scomporre costrutti di programmazione ripetitivi in ​​dati e un modello di trasformazione. Questi nuovi dati sono spesso indicati dai puristi come metadati quando usati in questo modo.


1

Non c'è nessuno al lavoro che possa aiutarti con questa domanda? È molto difficile visualizzare ciò di cui stai lavorando senza un esempio più ampio. Ma da quello che ho capito, sarà un programma in cui inseriscono principalmente informazioni. Ciò sarà in grado di recuperare e modificare le informazioni che il cliente deve gestire.

Buona fortuna!!


1

Penso che il consiglio dato non sia male, ma ho sempre pensato che il Data Driven Design ruota attorno all'utilizzo di strutture dati esistenti o date come base per i tuoi oggetti di dominio.

Ad esempio, il classico programma di gestione dei venditori potrebbe avere la seguente struttura di tipo di tabelle:

  • Venditore
  • Regione
  • I clienti
  • Prodotti

Quindi, la tua applicazione sarebbe incentrata sulla gestione di queste strutture di dati, invece di prendere una semplice API che fa cose come - "fare vendita" ecc ...

Solo la mia opinione come suggeriscono le altre risposte;)

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.