Що таке програмування на основі даних?


92

На роботі мені доручили написати детальний інженерний план логістичного додатка, який ми кодуємо, щоб запропонувати замовнику. Мені сказали, що це програма, керована даними. Що означає для програми "керування даними"? Що навпаки? Здається, я не можу отримати жодної справді чіткої відповіді на це, хоча під час веб-пошуку я бачу, як багато людей публікують власні приклади. Будь-яка допомога буде вдячна.


2
Практично все реальне програмування базується на даних.
Мартін Спамер,

16
Класичне мистецтво програмування Unix добре обговорює цю тему: homepage.cs.uri.edu/~thenry/resources/unix_art/ch09s01.html . Ключова цитата: "У програмуванні, керованому даними, дані є не просто станом якогось об'єкта, а насправді визначають керуючий потік програми . Там, де основним завданням ОО є інкапсуляція, основним завданням програмування, керованого даними, є написання якомога менше фіксованого коду ".
FMc

2
Відповідь FMc є для мене найбільш переконливим поясненням, і вона повинна бути відповіддю, але детальною.
Mads Skjern

Відповіді:


94

Програмування даних, кероване даними, є моделлю програмування, коли дані самі керують потоком програми, а не логікою програми. Це модель, де ви керуєте потоком, пропонуючи різні набори даних програмі, де логіка програми є якоюсь загальною формою потоку або змін стану.

Наприклад, якщо у вас є програма, яка має чотири стани: UP - DOWN - STOP - START

Ви можете керувати цією програмою, пропонуючи введення (дані), що представляють стани:

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

Код програми залишається незмінним, але набір даних (який не має динамічного типу введення, але статично передається комп’ютеру) керує потоком.


3
Програмна частина пише / визначає "загальну форму потоку або зміни стану", я не маю рації? Але я можу написати таку "машину" будь-якою мовою, і в цьому немає нічого незвичайного, тому я насправді нічого не отримую з вашої відповіді. Можливо, програмування на основі даних - це коли сама мова або бібліотека заохочує або робить дуже простим написання таких машин. Або, можливо, визначення полягає в тому, що мова / бібліотека давайте визначимо машини декларативно, тобто не процедурно.
Мадс Скерн,

2
На en.wikipedia.org/wiki/Data-driven_programming вони використовують AWK як приклад. У AWK подано дві речі, вираз, що визначає, що робити з даними, і самі дані. Який вираз визначає, що трапиться, що вважається таким: 1) програмування, або 2) дані. Якщо це вважається даними, тоді програмування - це сама машина AWK, що, звичайно, у прикладі AWK є статичним. Але в інших контекстах, наприклад, якщо сама машина пишеться якимось традиційним процедурним способом, це лише частина програмування.
Mads Skjern

Отже ... якщо припустити, що потужніші приклади програмування накопичувачів даних є повноцінними, чи не стає це просто заявою включення в движок із деякими заздалегідь побудованими припущеннями та інструментами?
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
Вибачте, але перший приклад виглядає як функціональне програмування (де дані та поведінка роз’єднані), а другий приклад виглядає як об’єктно-орієнтований (де дані та поведінка пов’язані).
Вакей

47

"Мені сказали, що це програма, керована даними" - потрібно запитати у того, хто вам це сказав.

Ви не хочете читати тут якусь правдоподібну відповідь, а потім з’ясуєте, що це зовсім не те, що мала на увазі особа, відповідальна за ваш проект. Фраза занадто розмита, щоб мати однозначне значення, яке точно стосуватиметься вашого проекту.


8
Я розумію, що ви маєте на увазі Річі, і це добре. Однак мені було цікаво, чи "програмування на основі даних" - це якийсь термін, конкретно визнаний індустрією розробки програмного забезпечення. Я не візьму будь-яку відповідь звідси просто по номіналу, не перевіривши з моїм начальником. -Дякую :)
jtbradle

5
Звичайно - ви мали рацію запитати тут. Але я думаю, що відповідь полягає в тому, що не існує загальновизнаного визначення.
RichieHindle

Як це називається, коли ви генеруєте свій UX з метаданих? Як це називається, коли робочим процесом керує зовнішня конфігурація? Це архітектура, керована даними, та архітектура, керована подіями? Чи було б програмування, кероване даними, більш подібним до WSDL та GraphQL, де створюються ваші моделі, але ви все одно кодуєте їх, проте вважаєте за потрібне?
Кори Алікс

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, який робить такі речі, як - "продати" тощо ...

Просто моя думка, як пропонують інші відповіді;)

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.