開始動手作這個項目時,發現沒法作到徹底的先設計、再編碼,因而決定分模塊進行,從管理員模塊開始設計、編碼,並且接口就已經改了好幾回了。前端
管理員模塊涉及的功能有登陸和後臺對管理員的維護,其中也涉及前端的開發。UI模板使用Inspinia,感受這套模板功能豐富、界面美觀,並且基於HTML5和BootStrap,對這兩方面的知識也能夠多些瞭解。ajax
在上一篇<如何在單元測試時隔離ORM>中,解決了對Service層進行測試怎樣構建僞對象的問題,隨後管理員模塊的Service層和單元測試在齊頭並進中完成了;前端基於模板套出的界面也好了。正則表達式
後臺登陸界面:瀏覽器
首頁:異步
管理員的維護還沒有完成,這兒記錄兩個以前遇到的問題:HTML5表單的異步提交驗證以及關於Autofac待注入對象的初始化的一個問題。函數
一 HTML5表單的異步提交驗證單元測試
a) 表單驗證測試
原本計劃表單的驗證使用ValidForm組件,但遇到了一些莫名其妙沒法解決的樣式問題,只好使用HTML5自帶的表單驗證,直接支持email、url等的校驗,但對瀏覽器有限制ui
另外,即便瀏覽器支持,但感受驗證並不嚴密,好比郵箱輸入相似email@abc居然也能夠經過驗證,因此仍是本身寫正則表達式靠譜。非空校驗要單獨添加required屬性。this
b) 表單異步提交
HTML5原生的校驗顏色比ValidForm漂亮,但以前只知道須要點擊submit按鈕才能觸發校驗,這是放棄原生校驗嘗試ValidForm的直接緣由,但ValidForm搞不定後,只好尋求HTML異步提交的方法,其實很方便:
在註冊的$("#formLogin").submit方法中,使用$(this).ajaxSubmit(options)替換了點擊submit時的事件行爲,進行ajax異步提交。
二 關於Autofac,在待注入對象的構造函數須要參數時的配置問題
爲了在對Service層的單元測試時隔離EF,在Service層和EF操做之間增長了IRepositoty接口及其實現,在初始化AdminUserService時要在其構造函數中傳遞AdminUserRepository參數
在單元測試時能夠手工傳遞,但在Controller中注入AdminUserService時卻不能這樣作了,須要配置Autofac在初始化AdminUserService要使用的IRepository<AdminUserEntity>對象。
在AutofacConfig的代碼中,最簡單的狀況是隻須要註冊Controller和IService接口的實現類,如今則還須要註冊以Reposiroty結尾的類(a.Name.EndsWith("Repository")),由於這裏規定實現IRepository的類統一以」 Repository」結尾,而後經過builder.Register(a => new AdminUserService( (IRepository<AdminUserEntity>)a.Resolve(typeof(IRepository<AdminUserEntity>))))來配置Autofac在初始化AdminUserService類時爲構造函數傳遞的參數爲IRepository<AdminUserEntity>。採用這種配置方式的話,意味着後續每當增長新的Service類時都要回到這兒創建手動映射,顯然有點不便,應該有更簡便的方法有待試驗。