2012-12-21 40 views
1

我有一個MVC4應用程序,其中包含用於BusinessLogic和DataAccess圖層的Model(Entity)DLL項目。 MVC控制器使用一些映射器擴展方法將ViewModels(綁定到視圖)轉換爲模型,並將Model對象傳遞給BusinessLogic層。ASP.NET MVC4 ViewModel和knockoutJS ViewModel重複

我的問題是:如果我需要像KnockoutJS這樣的客戶端功能,是否需要創建另一組KnockoutJS ViewModels?我擔心ViewModels的可維護性和頻繁更改。

回答

2

我會說不,knockoutJS是客戶端庫,因此不應該確定您的服務器如何發送數據。只要您的視圖模型包含渲染所需的所有相關信息,那麼這就是您所需要的。客戶端如何處理這與服務器完全無關。

通過創建knockoutJS特定的視圖模型,您本質上將您的服務器響應耦合到您的客戶端,這不是一個好主意 - 如果您將該行更改爲不同的客戶端,該怎麼辦?如果你想支持多個客戶端呢?

我建議創建一個客戶端代表您的視圖模型,而不是KnockoutJS。

+0

這很有道理。 – Faredoon

0

我建議您創建特定於KnockoutJS(或任何其他客戶端使用)的ViewModels。

我覺得在你的站點中使用的ViewModels在服務器端應該能夠很容易地改變,因爲站點既創建它們又使用它們。此外,你有編譯器讓你知道是否有錯誤。

但是,我覺得當我們向客戶公開這些模型時,這些變得多一點合約,不應該改變,或者至少不能經常改變。

+0

「*我建議你創建一個特定於KnockoutJS的ViewModel(或用於任何其他客戶端使用)*」 -​​ 我不同意,服務器不應該擔心*客戶端將如何呈現數據發送下來,它的工作是確保它*發送*數據。爲各種客戶創建一個單獨的視圖模型是IMO的一個可怕想法。單一視圖模型應該足以滿足* all *客戶端的需求。 – James

+0

是的,我的意思是「爲了任何其他客戶端消費」,應該爲_any_客戶端創建一個單獨的視圖模型來消費。我並不是說每個客戶都應該創建一個不同的視圖模型。 –