2012-07-13 32 views
6

我剛剛閱讀了一篇有關Microsoft如何正在向Web應用程序的REST接口+客戶端基於JavaScript的MVVM開發邁進的有趣文章。從傳統的ASP轉向。 NET MVC到WebApi + Knockout

我雖然在技術上理解這兩種模式之間的基本區別,我對於它,我怎麼寫的Web應用程序,最重要的是如何優雅地過渡到這種新模式的影響心亂如麻。

因此,有人從傳統的ASP.NET MVC移動到的WebAPI + KO時,出現下列問題:

  • 有沒有一種方法,以使用MVC不顯眼的或接近不顯眼的(即最少的代碼)驗證+ KO?
  • 如何進行單元測試他的UI代碼?
  • 瀏覽器兼容性與KO有關嗎?
  • 從一個模型移動到另一個模型時是否還有其他人需要考慮?
+0

現在*我有點困惑:.NET MVC和WebAPI有不同的用途嗎?我的意思是,MVC適用於web應用程序和網站,而WebAPI適用於API(以及服務等)。那麼,爲什麼有人會從MVC遷移到API?我錯過了什麼? – 2012-07-13 18:58:40

+0

這不一定是真的。這只是一種不同的做事方式。您可以擁有任何客戶端使用的Web API,包括但不限於您自己的網站! – georgiosd 2012-07-13 19:08:43

+0

但是,在這種情況下,你仍然需要一個網站作爲前端,對吧?也就是說,WebAPI項目將充當*服務層*,我明白了。 – 2012-07-13 19:11:43

回答

5

你看微軟開始推這個「單頁Web應用程序」的東西部分是因爲它可以提供更好的用戶體驗,但主要是因爲它使得它更容易得多您的Web應用程序遷移到作爲一個Windows 8的本地應用程序。

Re:unobtrusive javascript驗證...我會說,如果你使用Knockout,你是UI和你的腳本將會如此緊密耦合,即使只是基本的東西,不顯眼真的不是一個有效的目標。你可以驗證在淘汰賽(見https://github.com/ericmbarnard/Knockout-Validation#readme例如),但它通過定義相同ASP.NET MVC

再不是不顯眼:單元測試...看看https://stackoverflow.com/questions/6331789/knockoutjs-unit-testing-with-qunit

回覆:瀏覽器compat的。 ..我不知道任何現代瀏覽器的兼容性問題,除非你有瘋狂的用戶誰已禁用JavaScript

5

我發現this是一個非常好的討論的利弊試圖「不顯眼」與一個挖空網站。

傳統上,我非常贊成儘可能不讓Javascript顯眼,並且使用我的Knockout表達式,儘可能地將它們保持爲最小和整齊,方法是將任何繁重的提升轉換爲視圖模型中的函數並創建自定義封裝DOM邏輯的綁定 - 但我堅定地認爲,當明智地使用聲明式方法本身(例如使用數據綁定屬性的默認方式)時,這是一條可行的路線。也許是因爲我對Knockout的介紹是我工作的WPF應用程序的Web應用程序「端口」,而我的網站的Knockout綁定變得令人驚訝地接近它們的XAML等價物,因爲我更瞭解如何利用Knockout優雅。我只是喜歡能夠觀察標記並一眼就看到關於如何評估視圖的真實業務邏輯,而不是關於jQuery或其他物理構建方式的具體細節,以響應一些點擊事件,這些事件通過一個大的靈魂連接起來,銷燬Javascript文件。

當我重溫一些利用大量程序化jQuery來處理事件的傳統MVC站點時,我認爲是的,標記是整潔的,但在6個月後回到它,即使我很難理解我的意圖是什麼與所有這些jQuery選擇器,回調和DOM遍歷。我想我只會動態地應用Knockout綁定,如果我必須,即如果出現這種情況,我的綁定邏輯本身就是動態的 - 但無論如何,動態模板可能會以不同方式完成。

這是我的2分在你的問題的不顯眼的方面,如果你的經驗轉移到MVVM Javascript是像我的過去幾個月一樣,你不會回頭看。

+0

很好的答案,謝謝!你能詳細說明你對KO最佳實踐的瞭解嗎? – georgiosd 2012-07-15 13:16:28

+0

我幾個月來一直在使用Knockout,所以我最好不要過多地聲稱「最佳實踐」,但我肯定了解了很多,並不斷改進我的使用模式。我最近添加了很多Knockout回答/問題/動機咆哮,這可能會幫助你,否則,請隨時通過我的網站給我發電子郵件。乾杯。 – 2012-07-15 20:46:03

+0

@TomHall:很好的閱讀你的經驗!如果您可以在任何資源上發佈關於如何使用該技術(knockout.js + ASP.NET Web API)執行典型實體CRUD功能的示例,那將會非常有用。非常感謝 – superjos 2013-02-06 00:28:59