Что такое программирование, управляемое данными?


93

На работе мне было поручено написать подробный инженерный план для логистического приложения, которое мы пишем, чтобы предложить заказчику. Мне сказали, что это приложение, управляемое данными. Что означает «управляемость данными» для приложения? А что наоборот? Я не могу получить по-настоящему четкого ответа на этот вопрос, хотя во время поиска в Интернете я вижу, как многие люди публикуют свои собственные примеры. Любая помощь будет принята с благодарностью.


2
Практически все программирование в реальном мире основано на данных.
Martin Spamer 08

16
В классическом «Искусство программирования Unix» есть хорошее обсуждение этой темы: homepage.cs.uri.edu/~thenry/resources/unix_art/ch09s01.html . Ключевая цитата: «В программировании, управляемом данными, данные - это не просто состояние некоторого объекта, но фактически определяют поток управления программой . Если основной задачей объектно-ориентированного программирования является инкапсуляция, то в программировании, управляемом данными, основной задачей является написание как можно меньше фиксированного кода ".
FMc

2
Ответ FMc для меня является наиболее убедительным объяснением, и он должен быть ответом, но более подробным.
Мадс Скьерн

Ответы:


95

Программирование, управляемое данными, - это модель программирования, в которой сами данные контролируют ход программы, а не логику программы. Это модель, в которой вы управляете потоком, предлагая программе различные наборы данных, в которой логика программы представляет собой некую общую форму потока или изменений состояния.

Например, если у вас есть программа с четырьмя состояниями: UP - DOWN - STOP - START

Вы можете управлять этой программой, предлагая ввод (данные), который представляет состояния:

  • set1: ВНИЗ - СТОП - ПУСК - СТОП - ВВЕРХ - СТОП
  • set2: ВВЕРХ - ВНИЗ - ВВЕРХ - ВНИЗ

Программный код остается прежним, но набор данных (который не является динамическим типом ввода, а статически передается компьютеру) управляет потоком.


3
Часть программирования - это написание / определение «общей формы потока или изменений состояния», я прав? Но я могу написать такую ​​«машину» на любом языке, и в этом нет ничего необычного, так что я ничего особо не понял из вашего ответа. Возможно, программирование, управляемое данными, - это когда сам язык или библиотека поощряют или упрощают создание таких машин. Или, может быть, определение состоит в том, что язык / библиотека позволяют определять машины декларативным способом, то есть не процедурным.
Мадс Скьерн

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

Итак ... если предположить, что более мощные примеры программирования приводов данных завершены по Тьюрингу, не становится ли это просто оператором включения в движке с некоторыми заранее созданными предположениями и инструментами?
ZirconCode

55

Хотя существует несколько идей относительно программирования, управляемого данными, позвольте мне привести пример с использованием структуры данных и функции.

Пример без данных:

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
Я знаю, что это простой пример, но пример, не связанный с данными, просто выглядит как пример небрежного кодирования. Означает ли управляемость данными только хорошие методы кодирования? Если да, то зачем кому-то стремиться к подходу, не основанному на данных?
Jin

4
Мне очень жаль, но первый пример выглядит как функциональное программирование (где данные и поведение не связаны), а второй пример выглядит как объектно-ориентированный (где данные и поведение связаны).
Vakey 01

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

8

Приложение, управляемое данными:

(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.