2011-06-16 208 views
1

我將要問的問題受到我最近與Flex平臺(以及一些假裝實現MVC的框架)的工作的啓發,但我認爲這足以讓人們擁有各種專業知識。MVC中的M在哪裏?

對於相當多的時間,我都跟着範例,像凱恩戈姆提出的框架 -

查看,勢必調度事件單身模型的性能,和。 事件被前端控制器捕獲,並且命令得到執行。 命令調用服務,獲取數據並提供模型。 模型通過綁定隱式更新視圖。

這一切都不錯,聲音,直到我到了下面的數據結構:

用戶 擁有衆多的追隨者(用戶) 如下許多用戶 有一堆的照片 如下許多地方

照片 有很多likers(用戶) 有一個位置 有一個創作者 有許多相關的照片

Locatio ñ 有許多照片 擁有衆多的追隨者

再次,它不會使用由凱恩戈姆提出的想法,比如有一個 currentUser,currentLocation和currentPhoto一個問題,只是與它們結合。

問題出現在視圖本身。我可以想象,我有一系列複雜的「頁面」視圖,它們提供了鑽取的信息。例如,位置頁面顯示最新/熱門照片的網格,用於追隨者的面板以及基於拍攝照片的座標的地圖。這裏來的問題:

顯然,出於性能方面的原因,我無法獲取所有跟蹤特定位置的用戶或所有位置可能擁有的照片。我預取了一些,其他的將由服務器按需提供。

我想深入瞭解相同的視圖,例如,當點擊跟隨者的頭像頁面時,我應該得到該用戶照片的小格子,或者......。但我只有一個當前用戶在模型中。

這導致了一個問題,爲什麼我甚至需要綁定到一箇中央單身模型?我不能將每個視圖變成一種響應者,即視圖再次調度一次,但這次命令不是提供模型,而是直接提供調用視圖。

不會有任何耦合,因爲每個視圖都會實現IResponder。該命令只需要一個IResponder,它將從它被調用的事件中獲得。

我所看到的「模型」將扮演不同的角色。它將更像是一個緩存,一個全局的本地存儲字典,它將在命令從服務器發出請求之前通過該命令進行檢查。這樣可以節省一些對服務器的調用,但是,如果數據是非常零星的,那麼這些相同的數據將與其他數據一起被重複獲取。(我可能在緩存中有一些用戶數據,但一般情況下,爲了保持一致,我將調用服務器來收集關注者數據,無論其中是否有一部分數據可以保持一致)

對這些的任何反饋想法可以理解

+6

它剛剛開始。 * rimshot * – jhocking 2011-06-16 20:44:57

+0

請不要在這裏咆哮。 – Oded 2011-06-16 20:46:42

+0

我不是在咆哮,我只是很好奇 – user802232 2011-06-16 20:47:42

回答

1

我覺得您的實際問題是:

這導致了一個問題,爲什麼我 甚至需要綁定到一箇中央 單模式?

你不需要綁定到一箇中央單體模型。事實上,很多人聲稱這種方法非常糟糕,並且會導致性能問題。綁定可能是一個昂貴的操作,因此將所有可綁定值放在一個地方可能會在您的應用程序中造成連鎖效應。

Cairngorm似乎推動你朝這個方向發展的事實是對Cairngorm的一種常見批評。在Cairngorm的防守中,我沒有看到爲什麼 - 在Cairngorm體系結構中 - 如果你願意的話,你不能有多個「全局數據單身人士」。首先,我不會反駁反對單身人士的爭論。

大多數後Cairngorm框架可以被視爲對Cairngorm的迴應,並嘗試以不同的方式做事。

+0

索賠?它已被證明。 Singleton模型*是*可怕的:P – 2011-06-16 21:18:18

+0

如果涉及具有每個模型的情況,爲什麼我甚至需要將數據抽象爲單獨的模型類?在視圖本身中,我可以把它留在那裏。如果我的觀點實現了IResponder,那麼讓命令直接從服務中直接獲取數據,到視圖本身不知道任何事情的視圖都會非常容易。我已經將服務器端視爲某種模型。當然,我會同意至少有一個單身人士,爲了保持一般設置,將會很高興。 – user802232 2011-06-16 21:40:31

+1

確實。單身人士是可怕的。特別是如果你是一個重視單元可測試代碼的人......單身人士每次都會幫你。我應該備份一下......單身並不壞...單身模式是不好的。然而,單身一生並不是天生就不好的。例如,您的主窗口是單身人士。只有當你的班級在你遇到問題時對自己的一生負責。 – 2011-06-16 23:30:46

1

這不是一個真正的答案,因爲問題不是真正的問題。然而,如果你想看看'MVC',你應該遠離Cairngorm的很遠的地方,因爲它實現的可能是Flex所有應用程序框架中最差的MVC模式。最好的例子之一(或最糟糕的取決於你如何看待它)這是他們使用的單身模型Theo already blogged about

您應該查看RobotLegsParsley以瞭解正確的MVC體系結構。在我個人對建築的看法中,'模型'只是說'數據'的另一種方式。它只是一個爲你的應用程序保存數據或狀態的類。