的異常(從MVC的觀點),使得這樣的設計很難使MVC符合的是要顯示的信息,通過你的概念,「不生活在一個典範」。 MVC中沒有「模型中沒有的信息」這樣的東西:其概念根是「模型保存所有信息,視圖只是做演示任務,控制器調解用戶交互」。
這很可能是你顯示的信息不「對應於任何業務數據」,但(在MVC的世界觀)這樣做不意味着信息是「獨立於模型」,因爲有是不是這樣的事 - 它只是意味着你需要另一個模型類(無論你用什麼來保存「業務數據」),以保存這個「非業務」數據! - )
因此,當用戶「實例化一個窗口小部件」(創建一個目錄顯示視圖,大概是通過某些主/協調視圖上的用戶動作,如果「克隆」是實例化窗口小部件的方式之一,可能在另一個現有窗口小部件上),控制器負責創造機器人ha小部件對象和「目錄顯示模型類」的實例,並建立它們之間的連接(通常通過在小部件上設置對相關模型實例的引用),並告訴模型執行其初始信息加載。當小部件上的用戶操作意味着對模型的操作時,控制器從涉及事件的小部件中檢索對模型實例的引用,並向該實例發送適當的請求(這是模型的業務,讓視圖[S]感興趣瞭解更改信息 - 通常由一些觀察者模式;它絕對不是的控制器的業務信息養活的觀點 - 這是真正從MVC一個非常不同的方法!)。
是通過MVC值得的需要,你的情況的建築投資,相比粗糙的方法,把信息流不太純淨,並且應該在那裏並不存在的模式?我是一位實用主義者,我絕對不會在MVC的祭壇上敬拜,但我認爲在這種情況下,對健全,清晰的建築進行(相對較小的)投資確實可以大量償還。這是一個設想可能的變化方向的問題 - 例如,如果您使用正確的MVC路由,那麼您現在不需要的功能(但很快就會很快輸入畫面)將會變得微不足道,並且會否則就會成爲特別的問題的噩夢(或者需要對整個架構進行一些有點痛苦的重構)?所有這些可能的事情,從想要在不同的小部件中顯示相同的目錄信息到具有更智能的「目錄信息觀察」模型,其可以在需要時自動刷新自己(並且通過通常的觀察者模式直接向感興趣的視圖提供新的信息,沒有控制器的參與),MVC是自然而且容易的(嘿,這完全是MVC的全部點,所以這並不令人驚訝!),kludgy和脆弱的特殊角落 - 切割建築 - 投資小,潛在回報大,爲之奮鬥!
你可以從上一段,我沒有在「極限編程」神壇拜的基調注意到無論是 - 作爲一個實用主義者,我將做來講有點「設計了前」(尤其是從一開始,即使它不是必不可少的),這正是因爲根據我的經驗,一點點的深謀遠慮和非常適中的投資,特別是在建築方面,支付在項目生命週期內(在可擴展性,靈活性,可擴展性,可維護性,安全性等各種貨幣方面,多次重複使用),但並非所有項目都適用於每個項目 - 例如,在您的情況下,安全性和可擴展性並不是真正的問題......但另一個spects將可能! - )。
只是爲了一般性,讓我指出,我這個務實的態度確實不證明過度精力和花費由單詞「過度」 ;-)的定義採摘的架構(時間 - 熟悉有一些基本的架構模式(MVC肯定是其中之一)通常會減少時間和精力方面的初始投資 - 一旦您認識到這樣的經典架構將爲您提供良好的服務,就像在這種情況下一樣,這很容易看看如何體現它(例如,拒絕一個「沒有M的MVC」的想法 - ),並且它並沒有真正花費更多的代碼,相比於最糟糕的特別快捷鍵!)
這是非常有意義的,並且表明我對MVC理論的不完全理解 - 對於「可觀察」(或在小部件之間共享)的數據,無論「業務」如何,MVC模式更有用。即使我所瞄準的系統沒有類似inotify的能力(使刷新命令成爲必要),我可以看到重新定位這個小部件的平臺,通過觀察獲益。我認爲我現在對MVC的實用性在現在的節奏上更加了解 - 謝謝Alex! – cdleary 2009-11-16 04:19:52
@cdleary,不客氣!是的,如果你不在Windows/Mac OS X/Linux/BSD區域,刷新確實是必要的 - 但一個好的MVC基金會可以讓你處理各種平臺,包括帶有和不帶有能力。是的,實用性確實打破了純粹性,但是MVC作爲基礎架構可能非常實用(它不是唯一的,但它爲各種有用的功能提供了良好的服務......並且,實現起來並不難)! - )。 – 2009-11-16 05:54:49