DCI - данные, контекст и взаимодействие - преемник MVC? - PullRequest
38 голосов
/ 18 декабря 2008

Какое описание данных, контекста и взаимодействия (DCI) лучше всего подходит для организации?

Он создан Тригве Реенскауг , создателем MVC-паттерна .

Это действительно преемник MVC или просто другая модель? И в чем его плюсы и минусы?

Ответы [ 5 ]

47 голосов
/ 27 августа 2010

Trygve представляет DCI в https://vimeo.com/8235394

DCI был создан для решения проблемы с ориентацией объекта: слишком сложно просматривать OO-код.

Код для одного варианта использования в ОО обычно распределяется между множеством классов. Чтобы понять, как работает код, вы также должны знать отношения между объектами во время выполнения. Эти отношения не установлены в коде, они зависят от ситуации.

Что предлагает DCI, так это то, что код для данного варианта использования отделен от классов и помещен в другой артефакт, называемый контекстом. Объекты разных классов могут вступать в отношения в этом контексте и участвовать во взаимодействии, где они играют разные роли.

Смысл DCI в том, чтобы сделать код OO более читабельным!

Вот как бы я это описал.

17 голосов
/ 21 марта 2009

У меня сложилось впечатление, что это не преемник для MVC, а дополнение , например, рисунок 5 в статьи artima о DCI и то и другое. Я думаю, что это должно помочь сделать различие между моделью и контроллером более разумным, или, возможно, между другой частью контроллера или различными частями модели.

Основная идея, по-видимому, заключается в том, чтобы разделить логику для конкретных действий наших классов данных и переместить их в traits / mixins / что угодно, одно действие на пользователя. У вас будет много маленьких кусочков кода вместо нескольких больших кусочков. Кроме того, похоже, что добавление новых миксов должно быть «лучше», чем добавление функциональности в ваши базовые классы. Код для отдельных действий, вероятно, будет (я думаю?) Более распространенным, но код для различных действий должен быть более четко и очевидно разделен.

5 голосов
/ 14 марта 2012

Хороший вопрос и часто встречающийся вопрос. Короткий ответ: сама по себе эта парадигма основана на основополагающих идеях ОО Кей, Даля и других. Он был создан Trygve Reenskaug, как вы заметили, имея в виду несколько целей. Одной из них является цель сделать операции ввода-вывода первоклассными гражданами программы. (не IO, как в операциях с диском, но вся связь между двумя различными объектами). Другая важная цель DCI состоит в том, чтобы отделить то, что система делает (функциональность / поведение) от того, что система (данные)

1 голос
/ 21 мая 2012

Я думаю, что улучшение системного понимания является огромным выигрышем для любой организации, но вы также можете утверждать, что DCI является улучшением MVC из-за следующих дополнительных факторов:

  1. Четкое разделение поведения системы и данных обеспечивает многочисленные преимущества для операций агрегации данных, в том числе более эффективную аналитику в реальном времени из-за меньшего объема объектов домена.
  2. Повторное использование объекта данных и объекта поведения намного проще в функциональных подразделениях, когда они имеют свое собственное место жительства, а не частицы, как если бы они случайно помещались в подмножество смешанных объектов данных / поведения в системе.
  3. Поскольку BDD становится де-факто гибкой методологией, организация будет на несколько лет опережать остальную отрасль в этой практике и, возможно, образцом для подражания для других подобных организаций.
0 голосов
/ 05 апреля 2010

Это полностью выглядит для меня как основанный на политике дизайн Андрея Александреску в Modern C ++ design, однако работа на более низком уровне, DCI выглядит как архитектура с частями методологии (варианты использования определяют дизайн).

...