我從線分叉When using MVVM pattern, should code relating to property changes go in the setter or an event?Silverlight/MVVM設計:我的模型是什麼,在哪裏放置邏輯?
我的MVVM模式的理解與視圖和視圖模型零件OK ......
但對於Model部分?它是技術對象模型(EntityFramework SelfTracking生成的類,然後位於Web服務後面,然後是服務器中的所有業務邏輯)或應用程序邏輯模型(我們將在Silverlight客戶端上基於實體類當然,感謝PRISM項目鏈接器,它會呈現面向GUI的操作,並提供更多業務邏輯,並封裝髒的技術內容以訪問WS以將實體上的修改傳播到數據庫)?
(Personnaly,我想第二個的)
在我們的Silverlight/WCF(不RIA)的項目,我們管理的文件。我們有用於顯示這些文檔的視圖(例如InboxView.xaml),該視圖粘貼到InboxViewModel.cs中,其中包含要顯示的文檔列表。 InboxView中的ListBox是DataBound到InboxViewModel中的DocumentList ObservableCollection屬性。但是列表框ItemTemplate是DataBound到DocumentViewModel.cs,它封裝了實體生成的Document.cs類。
點是這個DocumentViewModel實際上是由其他視圖使用...(對我來說部分合適,如果MVVM確實規定了Views和ViewModels之間的雙射,但這不是我的觀點......)。
在我看來,我寧願有一個DocumentModel.cs而不是DocumentViewModel.cs,它可以被幾個ViewModel(InboxViewModel,EditDocumentViewModel ...)共享,並封裝對WS的調用以觸發業務操作服務器端與客戶端修改實體。然後,我們將在ViewModels(MV-VM)和視圖(M-視圖模型)中具有應用邏輯模型或面向GUI的模型(M -V-VM) V -VM)。所有在Silverlight方面。
但隨後2個問題:
1 - 如果保留我的愚見,這將是確定直接數據綁定一個ItemTemplate到模型對象?由於沒有任何視圖直接綁定到DocumentModel,而是綁定到InboxViewModel(例如,它是DocumentModel對象)中的屬性?
2-更一般地說,服務器端和客戶端實現業務邏輯的部分是什麼?由於服務器旨在將WS展示給其他(虛構的未來或未來虛構:p)應用程序,我們真的想要將所有第一個應用程序業務邏輯放在服務器中,還是隻通過WS公開所有原子操作,並讓所有應用程序實現其正確的邏輯呢?
我的技術領導不斷給我提供參考,但他/他沒有給我任何答案,而且,我只是想在我自己這裏思考。
感謝所有你們的...... 乾杯
+1我同意您的整體評估。一些註釋:「A」與MVVM無關 - 它是整體架構的一部分(VM可能參考),但不屬於UI開發的關注點。此外,「B」和「C」有時可能重疊,甚至相同,這取決於您的系統。我同意「E」,但我已經看到團隊對ViewModels執行1:M或M:1視圖並使其工作。 – 2011-04-07 20:20:01
謝謝菲爾。 A,B和C都是整個模型層的一部分。服務層是ViewModel與B進行通信以檢索B和/或C.是的,B&C可以重疊,有時它可以,有時不會。我不是故意暗示我的方式是最好的,只是我一直在想的東西:-)例外是我對E的立場:雖然你可以用其他方法取得成功,但從長遠來看,它只會導致麻煩和挫折。 – 2011-04-07 20:53:58