DCI - данные, контекст и взаимодействие - преемник MVC?

Какое лучшее описание Data, Context and Interaction (DCI), чтобы передать его организации?

Он создан Trygve Reenskaug, создатель MVC -pattern.

Действительно ли это преемник MVC или просто другой шаблон? И каковы его плюсы и минусы?

+38
источник поделиться
5 ответов

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

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

+17
источник

Trygve делает презентацию DCI в http://oredev.org/videos/dci--re-thinking-the-foundations-of-oo

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

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

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

Весь смысл DCI - сделать OO-код более удобочитаемым!

Как я мог бы передать это.

+47
источник

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

+5
источник

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

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

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

0
источник

Посмотрите другие вопросы по меткам или Задайте вопрос