2011-04-23 41 views
4

我們有一個用WPF/WCF編寫的富客戶端應用程序,並且打算在ASP.net中創建一個伴侶網站(如果可能,使用MVC)。在MVC中重用WPF ViewModels是否可行?

我被要求弄清楚我們當前的代碼庫有多少,我們可以重用(由一個單獨的團隊) - 我對ASP.net幾乎沒有任何經驗。

我們將重用我們的領域模型,但是有沒有什麼意義將ViewModel的WPF特定部分分開,並在MVC中重用WPF不可知的部分?它是否遵循相同的範式?我們只使用RelayCommands來進行命令,所以很容易將包含的方法包裝在ASP.net特定的東西中。但是關於UI特定的東西如何呢? ASP.net使用INotifyPropertyChanged - 或者它如何處理UI更新?

回答

3

對我來說它沒有任何意義。您的模型應該包含所有重要的業務邏輯代碼,並且應該是最大可重用性的要點。您的視圖模型應該只包含表示邏輯,並且對於桌面和Web應用程序來說這是不同的,重用這些模型是沒有意義的。

由於Web應用程序本質上是無狀態的,因此MVC不使用UI更新的任何綁定機制。實際上,您最有可能最終使用MVC應用程序的視圖模型,但在MVC中,它們充當簡單的數據傳輸對象(DTO),用於向視圖提供數據以便爲每個HTTP請求渲染。渲染視圖後,您需要返回服務器以更新視圖模型並重新渲染視圖。

或者,您當然也可以使用腳本更新UI客戶端。 Knockout.js是一個很好的客戶端視圖模型/視圖綁定JS庫。

+0

啊好吧 - 我認爲這是ViewModel這個術語的再次使用,讓我失望。謝謝您的幫助! – Goblin 2011-04-23 22:44:56

+0

將您的答案標記爲淘汰賽鏈接的解決方案 - 這將派上用場:-) – Goblin 2011-04-24 11:47:08

2

我無法直接回答您的具體問題,因爲它高度依賴於您的應用程序以及現有視圖模型的編寫方式,但您提出的問題非常有趣。

一方面,視圖模型包含很少視圖特定的代碼的邏輯是重用的誘人論證。另一方面,觀點模型非常明確地滿足了觀點的需要,並期望它滿足不同觀點的需要可能會產生問題。

最後我們可以給出的是指導方針。你當然不希望ifdefs或iff遍佈整個視圖模型。您可以將常見功能重構爲基類 - 這就是面向對象的方式 - 但是如果沒有良好的單元測試,它肯定會破壞已經工作的代碼中的某些東西。但不這樣做就意味着有一些令人討厭的剪切粘貼代碼幾乎相同,並且可能會產生維護噩夢。

也許一種實用的方法是假設您需要一個全新的視圖模型,但是要檢查您現有的視圖模型的代碼,您可以在開始之前將其壓入模型中,從而使視圖模型儘可能小盡可能。然後在某個時候,也許在你獲得一個原型的工作之後,你可以嘗試合併,看看它是否實用以及出現什麼問題。如果可行,請在繼續實施時考慮這些問題,然後根據您的需求計劃兩項任務。

+0

這很有道理 - 謝謝! – Goblin 2011-04-23 23:19:50

+0

我不知道,誰低估了你的答案 - 我認爲它非常有意義...... – Goblin 2011-04-24 11:47:44

+0

@Goblin:沒有什麼可以做的關於「驅動器downvoting」。祝你的項目好運。 – 2011-04-24 15:00:34