介紹
基本的操作像是”CRUD”,除了操作的類別不同之外,其他幾乎都一樣,所以可以將相同的部分抽離,我們可以善用”泛型(Generic)”的特性來處理這一部分,因為怕類別的主鍵會不同,所以就採用Expression<Func<TEntity, bool» 的方法,以傳入predicate參數的方式來解決,接著我們來實作Repository的抽離。
IRepository.cs
Repository.cs
完成GenericRepository後,已經在GenericRepository的實作中涵蓋了ProjectRepository和StructureRepository所有的方法,所以我們就不需要ProjectRepository和StructureRepository,也不需要他們的介面了。
HomeController
原本的Controller要修改成,使用IRepository與GenericRepository來做資料的存取,修改後的程式如下:
StructureContorller也是類似的修改方式,在兩個Controller的程式裡,原本是要使用IStructureRepository或是直接對資料庫做存取的方式,現在建立了IRepository和GenericRepository後,就不再需要用到之前所建立的Repository,將基本的資料操作抽離出來並使用泛型,這樣就不需要重複去建立基本的資料操作。
程式碼已放上Github
參考資料:
http://kevintsengtw.blogspot.tw/2012/10/aspnet-mvc-part2-repository.html