MVC подход с C ++ - PullRequest
       33

MVC подход с C ++

18 голосов
/ 03 августа 2011

Я изучаю паттерн PHP MVC, и это довольно круто. Я почти закончил приложение, и я вижу, как беспорядок вы можете сделать код без хорошего дизайна. Теперь можно ли применять MCV к приложениям на C ++? Куда идет менеджер плагинов / плагины, если это вообще возможно? В модели или контроллере? Спасибо!

EDIT:

Я имею в виду C ++ с инструментарием GUI, таким как QT / Wxwidgets / GTK + Также, пожалуйста, помогите мне о том, как реализовать в C ++. Я научился делать это в PHP, но, как вы знаете, два языка как-то различны!

EDIT2

http://forums.wxwidgets.org/viewtopic.php?f=1&t=30983

Ответы [ 6 ]

26 голосов
/ 03 августа 2011

как вы на самом деле реализуете это в C ++

  • , чтобы классы, отвечающие за рендеринг, ничего не знали о деталях приложения.Назовите их классами SomethingView, чтобы прояснить этот момент

  • , чтобы ваши доменные объекты ничего не знали о визуализации или взаимодействии с пользователем.Вам не нужно называть их Model, но вы можете

  • создать набор классов, отвечающих за выполнение роли контроллеров: связать каким-либо образом зависимости для просмотра и моделировать классы посредством внедрения зависимостейесли возможно.пример: CppInject .В любом случае классы контроллеров могут знать как о моделях, так и о классах представлений, поэтому важная часть такова: вся связь между видом и объектами модели изолирована от контроллеров .

  • Кроме того, это означает, что все программирование в императивном стиле должно быть также ограничено классами контроллера: представление и модель должны иметь декларативный стиль.Это означает, что они должны предлагать услуги, связанные с его ролью, но избегать прямого взаимодействия с другими объектами в качестве побочных эффектов

  • Это неправда, вам нужно реализовать коммуникациюмежду контроллерами и другими компонентами системы событий, хотя такая система определенно полезна, но, безусловно, не обязательна

  • сюрприз! вышеизложенное относится к любому языкуфреймворк, за исключением, конечно, языков, которые каким-то образом уже заставляют MVC сойти с горла с самого начала, то есть: ruby ​​on rails

9 голосов
/ 03 августа 2011

MVC - это шаблон проектирования, а не языковая конструкция, так что да, вы можете применить его и к приложению C ++.

MVC можно и нужно применять на любом языке, поэтому ваш пользовательский интерфейс слабо связан сБэкэнд и любой из них могут быть изменены с минимальным влиянием друг на друга.

Шаблон MVC обеспечивает четкое разделение объектов на:

  • Модели для ведения данных,
  • Представления для отображения всех или части данных и
  • Контроллеры для обработки событий, которые влияют на модель или представления.
4 голосов
/ 03 августа 2011

Да, MVC может применяться в C ++.Например, инфраструктура MFC использует архитектуру Document / View, которая по сути является MVC.

Шаблон проектирования не является библиотекой или классом.Это шаблон.Таким образом, у вас нет универсальной библиотеки MVC для C ++.

3 голосов
/ 06 августа 2012

Использование Каркас из древесных лягушек .TreeFrog Framework - это высокоскоростной полнофункциональный каркас C ++ для разработки веб-приложений.

2 голосов
/ 03 августа 2011

MVC - это шаблон архитектурного проектирования (то есть способ создания программного обеспечения), обычно связанный с веб-приложениями, но в целом он применим к любому программному проекту на любом языке. Вам нужно немного абстрагироваться от проекта и определить, какая часть программного обеспечения принадлежит каждой части (т. Е. Графический интерфейс, вероятно, является частью View и т. Д.).

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

0 голосов
/ 24 ноября 2014

Лично я использую автоматы буста для логических сигналов и сигналов буста для соединения вещей.

Я написал небольшой пример, который вы можете проанализировать здесь: https://github.com/edubois/mvp-player

...