2012-01-22 49 views
0

我在PluralSight的Brian Lagunas課程中學習MVVM。什麼是MVVM VIEW的第一種方法?

在開始的時候,他被書面方式這兩個接口:

public interface IView 
{ 
    IViewModel ViewModel {get;set;} 
} 

public interface IViewModel 
{ 
    IView View {get;set;} 
} 

我在這個模式下學習,然後他從IVIEW刪除視圖模型。

public interface IView {} 

但我看不出它的差別,也許有它的優點和缺點。 如果我把第一個例子放在什麼地方,有什麼不對嗎?

回答

6

這當然是少上下文留下任何有用的語句,但一見鍾情接口

public interface IViewModel 
{ 
    IView View {get;set;} 
} 

似乎很困惑我,因爲MVVM模式的主要思想是,視圖模型完全不知道的觀點。如果你在ViewModel中添加對View的引用,那麼你違反了這個想法。

+1

同意。這個界面讓我想起了MVP模式 –

+0

那麼,你是在爲這個環境打算?公共接口IVIEW { IViewModel視圖模型{獲取;集;}} 公共接口IViewModel {} –

+1

「該視圖模型是完全不知道的意見」 - 這個_totally_並不總是實際的或絕對必要的。如果您遵循「純粹」路徑,關閉Windows和顯示彈出窗口就變得非常困難。 –

0

那麼,我還沒有看到複數光束的過程,但我可以談論有關依賴管理。在原始方案中,你有實體A知道關於A的實體B和B,在這個意義上,有兩種程度的耦合:A依賴於B,而B依賴於A.雖然它們僅依賴於接口,是積極的,依賴依然存在。

通過刪除這些依賴項之一,您有一個情景,其中A依賴於B,但B不依賴於,關心甚至瞭解A.在原始情況下,如果對IView或IViewModel API,這些將是突破性的變化。在第二種情況下,您可以對IViewModel進行任何更改,而不會影響視圖實現。

這就是優勢。

至於缺點,唯一的一個是你失去了方便,但我認爲這不是一個真正的缺點。在我的書中,任何時候你都可以最小化耦合和依賴(在合理範圍內),這是一個勝利。

2

根據this blog

  • 視圖 - 第一:查看具有其視圖模型(通常是 通過數據綁定)的關係。
  • ViewModel-First:ViewModel創建視圖(通常通過一個 IoC容器)。

在這兩種方法中,它都呈現了對視圖模型的粘性。而且,這兩者暗示着一對一的關係,而常見的情況並非總是如此。

0

我認爲這是所有關於想法到摘要視圖通過ViewModel; ViewModel公開了必須呈現給視圖的任何屬性以及View [用戶輸入在實踐中]可以改變的屬性(認爲是雙向綁定)。這是綁定引擎要小心通過PropertyChanged事件以同步UI與ViewModel;通過這種方式,ViewModel不需要引用正在使用的視圖,它暴露給任何視圖(您想使用)的一些屬性...

相關問題