Unity 在MVC上的應用(中:Repository)
2011-05-21 18:06 bugfly 閱讀(3579) 評論(5) 收藏 舉報系列目錄
Unity 在MVC上的應用(擴展篇:JQuery AJAX)
Unity 在MVC上的應用(擴展篇:事務控制-前篇ActionFilter)
Unity 在MVC上的應用(擴展篇:事務控制-后篇Unit Of Work)
Unity 在MVC上的應用(擴展篇:日志管理NLog)
正題
回顧上篇介紹,我們可以看到一個小小的Demo是多么的臃腫,這一篇我將完善Repository模式,和引入Mock技術,開始轉入面向接口編程。
一如既往的風格,我們先來瀏覽一下項目物理結構圖。XD

如果你有看過上一篇,你會發覺,這次少了兩樣東西,首先是一個模擬數據庫的類和一些XXXRepository,由于我們今次是使用Moq去模擬數據庫,所以沒必要再實現一些硬性的組件類,而正如上篇所說,一個對象就要有一個Repository實現類,這是很惡心的,最求輕量的你想必是不允許這部分的重復勞動吧?話說,我上篇也寫得很累,哈哈~
好了,既然剛提到的是Repository模式,我們就看看這次新添加的IRepository<T>接口吧。

這個接口提供了基本的數據訪問操作,具體操作,每個程序員都有一套自己的定義,我們不深究為何要定義出這部分東西,能滿足需求就OK了。這里我們只有接口沒有具體的實現類,在下篇我們才引入ORM,那個時候才會有具體的實現類加入項目 XD,很遺憾的是這一篇依然沒有引入Unity,我寫文章的進度實在有點慢,(*^__^*) 嘻嘻……
由于開篇時說的是面向接口編程,所以上篇的那些new 對象的東西我全扔了,要說明的是直接new的后果會導致使用者和被使用者的形成一種強耦合關系,直接好處是前期開發很快速,但給維護和后期升級、更換技術支撐都帶來很大的投入!用一句俗語說去形容這種耦合關系就是:牽一發動全身。前期爽,后期悲劇!XD
所以這次我們的HomeController里的東西就變成這個摸樣了

剛才提到這次并沒有引入Unity,而且又沒有模擬數據庫的類,聰明的你就會問,你是怎么獲得獲得數據的呢?XD,這就是這次使用Moq的原因了,Moq是Mock框架之一,如果你喜歡LINQ,你一定喜歡它的語法方式,用起來來也挺容易的,園子里有不少它的入門文章,很好學。好了這里就不在大蝦們面前,班門弄斧了,XD
我們來看看如何模擬
要說明的是,new Mock<IRepository<Account>>()的意思是針對IRepository<Account>接口模擬出一個它的實現,相當于一個new XXX() 而這里的Setup()方法,意圖是當你登錄ID為HuntSoul,密碼未123456的時候,find()方法返回的是一個名字為HuntSoul的對象,這里偷懶沒寫全Account對象的屬性值,哈哈~能理解就OK。寫這個DEMO的時候發現Moq好像不支持泛型委托的參數,所以無法調試成功,會報錯,不過沒關系啦,下篇我們講引入ORM,那個時候就不需要模擬數據庫操作了。這篇的代碼就湊合看吧 XD.
下圖是DEMO里的相關Action邏輯,可以和上篇對比一下。

作者:桀驁的靈魂
出處:http://www.rzrgm.cn/HuntSoul/
本文版權歸作者和博客園共有,歡迎轉載,但未經作者同意必須保留此段聲明,且在文章頁面明顯位置給出原文連接,否則保留追究法律責任的權利。
浙公網安備 33010602011771號