Реализация шаблона Win32 MVC - PullRequest
4 голосов
/ 27 октября 2010

В настоящее время я работаю над приложением win32 и думаю, что мне, вероятно, следует использовать шаблон MVC.Теперь, согласно шаблону, код, который обрабатывает взаимодействие с пользователем, должен находиться в контроллере, чтобы я мог обновлять модель и / или представление соответственно.Но в Win32 это будет означать, что мой windowProc должен быть в контроллере?Мне кажется немного странным, я создал бы окно и все элементы пользовательского интерфейса, а затем создал бы подкласс wndProc в контроллере.С другой стороны, если я этого не сделаю, мне понадобится экземпляр контроллера в представлении, чтобы я мог управлять моделью.Я почти уверен, что это НЕ тот путь.

Если бы кто-нибудь мог указать мне правильное направление, это было бы здорово!

Спасибо.

Ответы [ 3 ]

3 голосов
/ 27 октября 2010

Код, который обрабатывает взаимодействие с пользователем - это просмотр.Контроллер «склеивает» модель с видом (проще говоря).Оконная процедура определенно принадлежит GUI, то есть части просмотра.Из этого графического интерфейса вы будете генерировать события, которые контроллер будет перехватывать, вызывать модель и отвечать на них.

0 голосов
/ 27 октября 2010

Возможно, проблема в вашем уровне абстракции.

Скажем, у вас была та же модель данных и элементы управления ее изменением, и вы хотели изменить весь интерфейс с win32 на HTML.Весь этот интерфейсный бит - это представление.

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

Контроллеры часто должны существовать вне времени жизни определенной части представления.

0 голосов
/ 27 октября 2010

Модель Document / View MFC - это недоделанная попытка MVC.Если вы думаете об использовании MFC, то вы можете использовать производный от CView класс для представления представления (дух!) И производный от CDocument класс для представления модели.К сожалению, MFC на самом деле не пытается отделить функциональность контроллера от модели или представления.

В приложении SDI Doc / View управляемый событиями характер Windows GUI позволяет соблазнительно легко отобразить некоторые функции контроллера в представлении - и большая часть сгенерированного мастером кода в MFC делает это.

В приложении MDI для каждой модели существует несколько представлений, и совершенно очевидно, что любое из них является контроллером, поэтому возникает соблазн поместить логику контроллера в класс документа или в окно фрейма.... но нетрудно добавить новый класс в качестве контроллера и использовать его для переноса логики домена.Вставить этот класс в MFC - это небольшая борьба, и большинство людей, похоже, не беспокоятся.Самый простой подход состоит в том, чтобы просто рассматривать Документ как модель и контроллер, объединенные в одно целое.

Это для MFC (который, несмотря на многие недостатки), по-прежнему является одной из наиболее продуктивных сред для написания приложений с графическим интерфейсом только для окон вC ++.Если вы не заботитесь о MFC или если вам нужна платформа, которая может поддерживать несколько платформ, возможно, у вас уже есть лучшая поддержка MVC - см., Например, эту статью о поддержке MVC в Qt.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...