DCI - данные, контекст и взаимодействие - преемник MVC?
Как лучше всего описать данные, контекст и взаимодействие (DCI), чтобы передать его организации?
Он создан Trygve Reenskaug, создателем MVC-паттерна.
Это действительно преемник MVC или просто другая модель? И каковы его плюсы и минусы?
5 ответов
У меня сложилось впечатление, что это не преемник MVC, а скорее дополнение, например, рисунок 5 в статье artima о DCI имеет и то, и другое. Я думаю, что это должно помочь сделать различие между моделью и контроллером более разумным, или, возможно, между другой частью контроллера или различными частями модели.
Кажется, что основная идея состоит в том, чтобы разделить логику для определенных действий наших классов данных и переместить ее в traits / mixins / чем угодно, одно действие на пользователя. У вас будет много маленьких кусочков кода вместо нескольких больших кусочков. Кроме того, похоже, что добавление новых миксов должно быть "лучше", чем добавление функциональности в ваши базовые классы. Код для отдельных действий, вероятно, (я думаю?) Будет более распространенным, но код для различных действий должен быть более четко и очевидно разделен.
Trygve проводит презентацию DCI в https://vimeo.com/8235394
DCI был создан, чтобы решить проблему с ориентацией объекта: слишком сложно просматривать OO-код.
Код для одного варианта использования в ОО обычно распределяется между множеством классов. Чтобы понять, как работает код, вы также должны знать отношения между объектами во время выполнения. Эти отношения не установлены в коде, они зависят от ситуации.
DCI предлагает, чтобы код для данного варианта использования был отделен от классов и помещен в другой артефакт, называемый контекстом. Объекты разных классов могут вступать в отношения в этом контексте и участвовать во взаимодействии, где они играют разные роли.
Весь смысл DCI состоит в том, чтобы сделать ОО-код более читабельным!
Вот как бы я это передал.
Хороший вопрос и часто встречающийся вопрос. Короткий ответ: сама по себе эта парадигма основана на основополагающих идеях ОО Кей, Даля и других. Он был создан Trygve Reenskaug, как вы заметили, имея в виду несколько целей. Одной из них является цель сделать операции ввода-вывода первоклассными гражданами программы. (не IO, как в операциях с диском, но вся связь между двумя различными объектами). Другая важная цель DCI состоит в том, чтобы отделить то, что система делает (функциональность / поведение) от того, что система (данные)
Я думаю, что улучшенное понимание системы является огромной победой для любой организации, но вы также можете утверждать, что DCI является улучшением MVC из-за следующих дополнительных факторов:
- Четкое разделение поведения системы и данных обеспечивает многочисленные преимущества для операций агрегации данных, включая более производительную аналитику в реальном времени из-за меньшего объема объектов домена.
- Повторное использование объекта данных и объекта поведения намного проще в функциональных подразделениях, когда они имеют свое собственное место для жизни, а не в виде частиц, как если бы они случайно помещались в подмножество смешанных объектов данных / поведения в системе.
- Поскольку BDD становится де-факто гибкой методологией, организация будет на несколько лет опережать остальную отрасль в этой практике и, возможно, образцом для подражания для других подобных организаций.
Это полностью выглядит для меня как основанный на политике дизайн Андрея Александреску в Modern C++ design, однако эта работа более низкого уровня, DCI выглядит как архитектура с частями методологии (варианты использования определяют дизайн).