Co to jest programowanie oparte na danych?


93

W pracy otrzymałem zadanie napisania szczegółowego planu inżynieryjnego aplikacji logistycznej, którą kodujemy, aby zaproponować klientowi. Powiedziano mi, że jest to aplikacja oparta na danych. Co to znaczy, że aplikacja jest „oparta na danych”? A co jest odwrotnie? Nie mogę znaleźć żadnej naprawdę jasnej odpowiedzi na to pytanie, chociaż podczas wyszukiwania w Internecie widzę, że wiele osób publikuje własne przykłady. Każda pomoc byłaby bardzo mile widziana.


2
Prawie całe programowanie w świecie rzeczywistym jest oparte na danych.
Martin Spamer

16
Klasyczna sztuka programowania w Uniksie dobrze omawia ten temat: homepage.cs.uri.edu/~thenry/resources/unix_art/ch09s01.html . Kluczowy cytat: „W programowaniu opartym na danych dane nie są jedynie stanem jakiegoś obiektu, ale w rzeczywistości definiują przepływ sterowania w programie . Tam, gdzie głównym problemem w OO jest hermetyzacja, głównym problemem w programowaniu opartym na danych jest pisanie jak najmniej ustalonego kodu ”.
FMc,

2
Odpowiedź FMc jest dla mnie najbardziej przekonującym wyjaśnieniem i powinna być odpowiedzią, ale dopracowaną.
Mads Skjern

Odpowiedzi:


95

Programowanie oparte na danych to model programowania, w którym same dane sterują przepływem programu, a nie jego logiką. Jest to model, w którym kontrolujesz przepływ, oferując programowi różne zestawy danych, gdzie logika programu jest jakąś ogólną formą przepływu lub zmian stanu.

Na przykład, jeśli masz program, który ma cztery stany: GÓRA - DÓŁ - STOP - START

Możesz kontrolować ten program, oferując dane wejściowe (dane), które reprezentują stany:

  • zestaw1: DÓŁ - STOP - START - STOP - GÓRA - STOP
  • zestaw2: GÓRA - DÓŁ - GÓRA - DÓŁ

Kod programu pozostaje taki sam, ale zestaw danych (który nie jest dynamicznym typem danych wejściowych, ale statycznie przekazany komputerowi) steruje przepływem.


3
Część programistyczna polega na pisaniu / definiowaniu „ogólnej formy przepływu lub zmian stanu”, mam rację? Ale mogę napisać taką „maszynę” w dowolnym języku i nie ma w tym nic niezwykłego, więc tak naprawdę nie wyciągam niczego z Twojej odpowiedzi. Być może programowanie oparte na danych ma miejsce wtedy, gdy sam język lub biblioteka zachęca lub bardzo ułatwia pisanie takich maszyn. A może definicja jest taka, że ​​język / biblioteka pozwala zdefiniować maszyny w sposób deklaratywny, tj. Nie proceduralny.
Mads Skjern

2
Na en.wikipedia.org/wiki/Data-driven_programming używają AWK jako przykładu. W AWK dostarczane są dwie rzeczy: wyrażenie określające, co należy zrobić z danymi oraz same dane. Co to jest wyrażenie określające, co się stanie za: 1) programowanie lub 2) dane. Jeśli uważa się to za dane, to programowanie jest samą maszyną AWK, która oczywiście w przykładzie AWK jest statyczna. Ale w innych kontekstach, np. Jeśli piszemy samą maszynę w jakiś tradycyjny, proceduralny sposób, tylko to jest częścią programowania.
Mads Skjern

A więc ... zakładając, że przykłady programowania napędów danych o większej mocy są kompletne, czy nie stanie się to po prostu instrukcją include w silniku z pewnymi wstępnie zbudowanymi założeniami i narzędziami?
ZirconCode

55

Chociaż istnieje więcej niż kilka pomysłów na to, czym jest programowanie oparte na danych, pozwólcie mi podać przykład przy użyciu struktury danych i funkcji.

Przykład niezwiązany z danymi:

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

Przykład oparty na danych:

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

W pierwszym przykładzie decyzja o wyświetleniu jednego lub drugiego wyniku leży w logice kodu. W ostatnim przykładzie wynik jest określany przez dane przekazywane do funkcji iz tego powodu mówimy, że dane wyjściowe są „sterowane” przez dane.


3
Wiem, że to prosty przykład, ale przykład nie oparty na danych wygląda jak przykład niechlujnego kodowania. Czy sterowanie danymi oznacza tylko dobre praktyki kodowania? Jeśli tak, dlaczego ktoś miałby chcieć stosować podejście nieoparte na danych?
Jin

4
Przykro mi, ale pierwszy przykład wygląda jak programowanie funkcjonalne (gdzie dane i zachowanie są oddzielone), a drugi przykład wygląda jak zorientowany obiektowo (gdzie dane i zachowanie są połączone).
Vakey

47

„Powiedziano mi, że jest to aplikacja oparta na danych” - musisz zapytać tego, kto ci to powiedział.

Nie chcesz czytać tutaj jakiejś wiarygodnej odpowiedzi, a potem przekonać się, że wcale nie o to chodziła osoba odpowiedzialna za Twój projekt. Fraza jest zbyt ogólnikowa, aby miała jednoznaczne znaczenie, które z pewnością będzie miało zastosowanie do Twojego projektu.


8
Rozumiem, co masz na myśli Richie, i to jest dobra uwaga. Zastanawiałem się jednak, czy „programowanie oparte na danych” jest jakimś terminem konkretnie rozpoznawanym przez przemysł programistyczny. Nie przyjmuję stąd żadnej odpowiedzi po prostu za dobrą monetę bez sprawdzenia z moim szefem.
-Dziękujemy

5
Jasne - miałeś rację pytając tutaj. Ale myślę, że odpowiedź jest taka, że ​​nie ma powszechnie akceptowanej definicji.
RichieHindle

Jak się to nazywa, gdy generujesz UX z metadanych? Jak się to nazywa, gdy przepływ pracy jest kontrolowany przez konfigurację zewnętrzną? Czy jest to architektura oparta na danych czy architektura oparta na zdarzeniach? Czy programowanie oparte na danych byłoby bardziej podobne do WSDL i GraphQL, w których generowane są modele, ale nadal kodujesz je w dowolny sposób?
Corey Alix

15

Rozwój oparty na danych to coś, co można zmienić w logice programu, edytując nie kod, ale strukturę danych.

Więcej informacji na temat programowania opartego na danych można znaleźć pod adresem http://www.faqs.org/docs/artu/ch09s01.html

Programowanie proceduralne

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

Programowanie oparte na danych

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

8

Aplikacja oparta na danych to:

(1) zestaw reguł akceptujących różne zestawy danych w celu podjęcia z góry określonej decyzji dla każdego określonego zestawu danych i wyrzucenia wyniku

(2) kilka z góry określonych procesów, które są uruchamiane na podstawie wyniku.

Doskonałym przykładem jest ifttt.com

Aplikacja ma tylko zasady. To, co czyni go użytecznym, to dane, które będą przez niego przepływać.



1

W pracy nie ma nikogo, kto mógłby ci pomóc w tym pytaniu? Bardzo trudno jest wyobrazić sobie, bez czego się pracuje, bez większego przykładu. Ale z tego, co wiem, będzie to program, do którego przede wszystkim wprowadzają informacje. Dzięki temu będzie można pobierać i edytować informacje, którymi klient musi zarządzać.

Powodzenia!!


1

Myślę, że podane rady nie są złe, ale zawsze myślałem, że projektowanie oparte na danych obraca się wokół wykorzystania istniejących lub danych struktur danych jako podstawy dla obiektów domeny.

Na przykład klasyczny program do zarządzania sprzedawcami może mieć następującą strukturę typów tabel:

  • Sprzedawca
  • Region
  • Klienci
  • Produkty

Twoja aplikacja byłaby więc skoncentrowana na zarządzaniu tymi strukturami danych, zamiast korzystać z prostego interfejsu API, który wykonuje takie rzeczy, jak „robienie sprzedaży” itp.

Tylko moja opinia, jak sugerują inne odpowiedzi;)

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.