簡體   English   中英

Win32 MVC模式實現

[英]Win32 MVC pattern implementation

我目前正在研究win32應用程序,我想我應該使用MVC模式。 現在根據模式,處理用戶交互的代碼應該在控制器中,以便我可以相應地更新模型和/或視圖。 但在Win32中,這是否意味着我的windowProc應該在控制器中? 這對我來說有點奇怪,我會創建一個窗口和所有UI的東西,然后在控制器中將wndProc子類化。 另一方面,如果我不這樣做,我最終需要視圖中的控制器實例,以便我可以處理模型。 我很確定這不是要走的路。

如果有人能指出我正確的方向,那將是偉大的!

謝謝。

處理用戶交互的代碼是view。 控制器用視圖“粘合”模型(簡單地說)。 窗口過程肯定屬於GUI,即視圖部分。 通過此GUI,您將生成控制器將捕獲的事件,調用模型並響應它們。

MFC的Document / View模型是MVC的一個半生不熟的嘗試。 如果您正在考慮使用MFC,那么您可以使用CView派生類來表示視圖(duh!)和CDocument派生類來表示模型。 不幸的是,MFC並沒有真正嘗試將控制器功能與模型或視圖分開。

在SDI Doc / View應用程序中,Windows GUI的事件驅動特性使得將一些控制器功能放入視圖中變得非常容易 - 而MFC中的大部分向導生成的代碼都可以實現這一點。

在MDI應用程序中,每個模型有多個視圖,顯然它們中的任何一個都是控制器是錯誤的,因此誘惑是將控制器邏輯放入文檔類或框架窗口......但它不是很難添加一個新類來充當控制器並使用它來包裝域邏輯。 盡管如此,將這類課程變成MFC也是一種掙扎,而且大多數人似乎並不打擾。 最簡單的方法就是將Document作為模型和控制器集於一身。

這對於MFC來說(盡管存在許多缺點)仍然是用C ++編寫僅限Windows的GUI應用程序的最高效框架之一。 如果您不關心MFC,或者您需要一個可以支持多個平台的框架,那么您可能已經擁有了更好的MVC支持 - 例如,請參閱有關在Qt中支持MVC的這篇文章

問題可能是你的抽象層次。

假設您擁有相同的數據模型,以及如何修改它的控件,並且您希望將整個界面從win32更改為HTML。 整個接口位是視圖。

現在,您甚至可以擁有多個模型和控制器,例如域數據,以及當前應用程序的查看方式。

控制器通常需要存在於視圖的特定部分的生命周期之外。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM