Durandal 和 ASP.NET MVC 約定
我目前正在評估Durandal在企業ASP.NET MVC應用程序中的使用。
然而,Durandal 使用的預設約定似乎與我已經習慣的 MVC 約定相衝突。
John Papa 的 HotTowel MVC 模板很棒,但這似乎也“廢除”了 MVC 約定,通過將東西放在 App 文件夾中支持 Durandals。
我對這些約定的一些問題是:
- 視圖可能被拆分到兩個位置(/App/views 和 /Views)。
- 腳本也分為兩個位置(/App/durandal 和 /Scripts)。
- 視圖不在
RazorViewEngine.我更願意將每個元素包含在適當的 MVC 約定中,例如
/Controllers/ ---- HomeController ---- AdminController /Scripts/ ---- durandal/ ---- viewmodels/ -------- Home -------- Admin /Views/ ---- Home ---- Admin我的問題是:
- 是否可以配置 Durandal 來實現上述(或類似的)?
- 冒險擺脫預設的 Durandal 約定是否明智?
- 這樣做的潛在問題是什麼?
1.是否可以配置Durandal來實現上述(或類似的東西)?
是的,您可以擁有任何您想要的文件夾結構。Durandal 不會對您的應用程序強加任何文件夾結構,但它確實具有完全可覆蓋的預設約定。
如果您使用的是 Durandals路由器,那麼您將需要研究如何配置它以查找模組。有很多方法可以做到這一點,我更喜歡通過覆蓋
router.autoConvertRouteToModuleId.如果您不使用路由器外掛,那麼您將不得不自己管理模組的 uri,這是通過遵循requirejs 的約定並在 w/ durandals組合模組中使用此約定來完成的。
此外,您可以通過覆蓋視圖定位器約定來覆蓋它如何找到要綁定到您的模組的視圖。Durandal 提供了一種非常簡單的方式來建構開箱即用的小型應用程序,但是如果您需要建構更大的應用程序,那麼建議您創建自己的約定。
- 放棄預設的 Durandal 約定是否明智?3. 這樣做的潛在問題是什麼?
因此,存在如何發現模組以及如何發現完全可覆蓋的視圖的約定。我建議您覆蓋這些並選擇最適合您的方式。但是,至於將 durandal 放在上面列出的腳本文件夾中,我認為這不是一個好主意。
我不推薦這樣做的原因是因為我將腳本文件夾視為所有非 AMD 模組的第三方腳本的位置。這是因為 Durandal 還附帶了一個optimizer.exe,它可以將所有 html/css/js (amd) 文件壓縮/壓縮/醜化為 1 個文件。
如果您將整個應用程序保存在一個 app 文件夾下,然後將 durandal 文件夾放在您的 app 文件夾中,那麼優化器就可以正常工作,因為它位於 app/durandal/amd 文件夾中。因此,當您執行它時,它會向上遍歷 2 個目錄到您的 app 文件夾,然後掃描每個子文件夾以創建app.build.js的requirejs 優化文件。然後它將為您將整個應用程序壓縮到一個文件中。
這比每次向項目中添加新文件時都必須手動編輯 app.build.js 文件要好。當然..還有其他工具也可以做到這一點..但是您將不得不花時間學習他們的api以及如何配置它們。如果你不想花時間學習像grunt這樣的東西,那麼這個優化器就很牛逼了。就個人而言,我喜歡點兩下某些東西並為我建構整個應用程序的能力。
至於將所有非 amd 的第三方庫放在單獨的腳本文件夾中,我會考慮像使用MVC 的捆綁一樣單獨壓縮這些庫。我將它們單獨捆綁的原因是因為您知道這些文件經常更改,如果您將它們捆綁到單獨的 js 文件中,它們可以由瀏覽器單獨記憶體。而如果您的水療中心正在發生變化,它可能會發生變化……那麼您希望瀏覽器單獨記憶體它,因此它只需要重新下載您的壓縮應用程序。