Qu'est-ce que la programmation basée sur les données?


93

J'ai été chargé au travail de rédiger un plan d'ingénierie détaillé pour une application logistique que nous codons pour proposer à un client. On m'a dit que c'était une application basée sur les données. Qu'est-ce que cela signifie pour une application d'être «pilotée par les données»? Quel est le contraire? Je ne parviens pas à obtenir de réponse vraiment claire à ce sujet, bien que lors de la recherche sur le Web, je puisse voir de nombreuses personnes publier leurs propres exemples. Toute aide serait grandement appréciée.


2
Presque toute la programmation du monde réel est basée sur les données.
Martin Spamer

16
Le classique The Art of Unix Programming a une bonne discussion sur ce sujet: homepage.cs.uri.edu/~thenry/resources/unix_art/ch09s01.html . Citation clé: "Dans la programmation basée sur les données, les données ne sont pas simplement l'état d'un objet, mais définissent en fait le flux de contrôle du programme . Lorsque la principale préoccupation en OO est l'encapsulation, la principale préoccupation de la programmation basée sur les données est l' écriture aussi peu de code fixe que possible . "
FMc

2
La réponse de FMc est pour moi l'explication la plus convaincante, et devrait être une réponse, mais élaborée.
Mads Skjern

Réponses:


95

La programmation pilotée par les données est un modèle de programmation où les données elles-mêmes contrôlent le flux du programme et non la logique du programme. C'est un modèle où vous contrôlez le flux en offrant différents ensembles de données au programme où la logique du programme est une forme générique de flux ou de changements d'état.

Par exemple, si vous avez un programme qui a quatre états: UP - DOWN - STOP - START

Vous pouvez contrôler ce programme en offrant des entrées (données) qui représentent les états:

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

Le code du programme reste le même mais l'ensemble de données (qui n'est pas d'un type d'entrée dynamique mais donné statiquement à l'ordinateur) contrôle le flux.


3
La partie programmation écrit / définit la "forme générique de flux ou de changements d'état", n'est-ce pas? Mais je peux écrire une telle "machine" dans n'importe quelle langue, et il n'y a rien d'inhabituel à cela, donc je ne retiens vraiment rien de votre réponse. Peut-être que la programmation basée sur les données est lorsque le langage lui-même ou une bibliothèque, encourage ou rend très facile l'écriture de telles machines. Ou peut-être que la définition est que le langage / bibliothèque permet de définir les machines de manière déclarative, c'est-à-dire non procédurale.
Mads Skjern

2
Sur en.wikipedia.org/wiki/Data-driven_programming , ils utilisent AWK comme exemple. Dans AWK, deux éléments sont fournis, une expression définissant ce qu'il faut faire avec les données et les données elles-mêmes. Quelle est l'expression définissant ce qui doit arriver considéré comme: 1) la programmation, ou 2) les données. Si elle est considérée comme des données, alors la programmation est la machine d'AWK elle-même, ce qui, bien sûr, dans l'exemple d'AWK est statique. Mais dans d'autres contextes, par exemple si vous écrivez la machine elle-même d'une manière procédurale traditionnelle, cela seul est la partie programmation.
Mads Skjern

Donc ... en supposant que des exemples de programmation de lecteurs de données plus puissants soient complets, cela ne devient-il pas simplement une instruction d'inclusion dans un moteur avec des hypothèses et des outils prédéfinis?
ZirconCode

55

Bien qu'il y ait plus que quelques idées sur ce qu'est la programmation axée sur les données, permettez-moi de donner un exemple utilisant une structure de données et une fonction.

Exemple non basé sur les données:

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

Exemple basé sur les données:

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

Dans le premier exemple, la décision d'afficher un résultat ou l'autre est dans la logique du code. Dans le dernier exemple, la sortie est déterminée par les données transmises à la fonction et pour cette raison, nous disons que la sortie est «pilotée» par les données.


3
Je sais que c'est un exemple simple, mais l'exemple non basé sur les données ressemble simplement à un exemple de codage bâclé. La gestion des données signifie-t-elle simplement de bonnes pratiques de codage? Si tel est le cas, pourquoi quelqu'un voudrait-il adopter une approche non fondée sur les données?
Jin

4
Je suis désolé, mais le premier exemple ressemble à une programmation fonctionnelle (où les données et le comportement sont découplés), et le deuxième exemple ressemble à une orientation objet (où les données et le comportement sont couplés).
Vakey

47

«On m'a dit que c'était une application basée sur les données» - vous devez demander à celui qui vous a dit cela.

Vous ne voulez pas lire une réponse plausible ici et découvrir ensuite que ce n'est pas du tout ce que voulait dire la personne en charge de votre projet. La phrase est trop vague pour avoir une signification sans ambiguïté qui s'appliquera définitivement à votre projet.


8
Je comprends ce que tu veux dire Richie, et c'est un bon point. Cependant, je me demandais si «programmation basée sur les données» était une sorte de terme reconnu concrètement par l'industrie du développement de logiciels. Je ne prendrai aucune réponse d'ici simplement pour argent comptant ici sans vérifier avec mon patron. -Merci :)
jtbradle

5
Bien sûr - vous aviez raison de demander ici. Mais je pense que la réponse est qu'il n'y a pas de définition universellement acceptée.
RichieHindle

Comment s'appelle-t-il lorsque vous générez votre UX à partir de méta-données? Comment s'appelle-t-il lorsque votre flux de travail est contrôlé par une configuration externe? S'agit-il d'une architecture basée sur les données et d'une architecture orientée événement? La programmation basée sur les données s'apparente-t-elle davantage à WSDL et GraphQL où vos modèles sont générés, mais vous codez toujours contre eux comme bon vous semble?
Corey Alix

15

Le développement basé sur les données est quelque chose que l'on peut apporter des changements à la logique du programme en éditant non pas le code mais la structure des données.

Vous pouvez trouver plus d'informations sur la programmation basée sur les données sur http://www.faqs.org/docs/artu/ch09s01.html

Programmation procédurale

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

Programmation basée sur les données

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

L'application pilotée par les données est:

(1) un ensemble de règles acceptant différents ensembles de données pour prendre une décision prédéterminée pour chaque ensemble de données spécifique et lancer le résultat comme résultat

(2) quelques processus prédéterminés qui sont déclenchés en fonction du résultat.

L'exemple parfait est ifttt.com

L'application n'a que des règles. Ce qui le rend utile, ce sont les données qui le traverseront.


4

Cet article explique le plus clairement ce que j'entends par ce terme:

Qu'est-ce que la programmation basée sur les tables et les données? http://www.paragoncorporation.com/ArticleDetail.aspx?ArticleID=31

La programmation basée sur les données / tables est la technique de factorisation de constructions de programmation répétitives en données et en un modèle de transformation. Ces nouvelles données sont souvent appelées par les puristes des méta-données lorsqu'elles sont utilisées de cette manière.


1

Personne au travail ne peut vous aider avec cette question? Il est très difficile de visualiser sans quoi vous travaillez sans un meilleur exemple. Mais d'après ce que j'ai compris, ce sera un programme dans lequel ils entreront principalement des informations. Cela pourra récupérer et modifier les informations que le client doit gérer.

Bonne chance!!


1

Je pense que les conseils donnés ne sont pas mauvais, mais j'ai toujours pensé que la conception basée sur les données tournait autour de l'utilisation de structures de données existantes ou données comme base pour les objets de votre domaine.

Par exemple, le programme de gestion des commerciaux classique peut avoir la structure de type de tables suivante:

  • Vendeur
  • Région
  • Les clients
  • Des produits

Ainsi, votre application serait centrée sur la gestion de ces structures de données, au lieu de prendre une API simple qui fait des choses comme - "faire une vente", etc.

Juste mon avis comme le suggèrent les autres réponses;)

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.