Lind.DDD.Repositories.EF層(ceng)介紹
Lind.DDD.Repositories.EF以(yi)(yi)下簡(jian)稱Repositories.EF,之所(suo)以(yi)(yi)把它從(cong)Lind.DDD中(zhong)拿出來,完全出于(yu)可插(cha)拔的(de)(de)(de)考慮(lv),讓大家(jia)都能休(xiu)會到(dao)IoC的(de)(de)(de)魅力,用(yong)到(dao)哪種(zhong)方法持久(jiu)化,就將(jiang)那個DLL放到(dao)應用(yong)程序中(zhong),完全不需要(yao)(yao)把所(suo)有(you)持久(jiu)化方式耦合到(dao)一個項(xiang)目(mu)里,這也是遵循了OCP的(de)(de)(de)原則(ze),對(dui)擴展是開放的(de)(de)(de),即(ji)你可以(yi)(yi)添加其它的(de)(de)(de)持久(jiu)化方式,在新的(de)(de)(de)項(xiang)目(mu)里;而不要(yao)(yao)在原有(you)的(de)(de)(de)項(xiang)目(mu)中(zhong)進(jin)行代碼的(de)(de)(de)修(xiu)改.
Repositories.EF做(zuo)為數據(ju)持久(jiu)化的(de)一種方式,它直(zhi)接(jie)繼承了Lind.DDD.IRepositories接(jie)口(kou)模塊,它實現了IRepository,IExtensionRepository和IOrderableRepository等倉(cang)儲操作,開發(fa)人員在使(shi)(shi)用時,可(ke)以(yi)根(gen)據(ju)自己的(de)需(xu)要去(qu)聲(sheng)明不同的(de)接(jie)口(kou)變量,以(yi)最小程度的(de)使(shi)(shi)用它,而不是所以(yi)時候都使(shi)(shi)用IExtensionRepository的(de)完(wan)整(zheng)接(jie)口(kou),如你的(de)類(lei)中只用到了實體的(de)添加,那你完(wan)全(quan)可(ke)以(yi)把對象聲(sheng)明成IRepository基本倉(cang)儲,這(zhe)樣你的(de)使(shi)(shi)用時,也(ye)更加清楚.
Repositories.EF項目結(jie)構很簡單,只(zhi)有(you)一(yi)個Repository的(de)實現,看(kan)一(yi)下結(jie)構圖
它(ta)內(nei)部使用了(le)IExtensionRepository接口,由于IExtensionRepository同時(shi)繼(ji)承了(le)IRepository和(he)IOrderableRepository,所以,EF在實現(xian)(xian)它(ta)時(shi),這(zhe)兩個基接口也(ye)會現(xian)(xian)時(shi)被實現(xian)(xian).
其實(shi)對(dui)于方法(fa)內部的(de)(de)實(shi)現(xian),大叔之(zhi)前的(de)(de)文章中已經介紹很多了(le),大叔可以自已進(jin)行(xing)查閱(yue),之(zhi)后(hou)這(zhe)個(ge)Repositories.EF倉儲(chu)在(zai)實(shi)現(xian)項目(mu)中不會出現(xian),它只會通過IoC在(zai)程序運行(xing)時動(dong)(dong)態生產出來,這(zhe)點(dian)大叔要清楚,不要把Repositories.EF引用到(dao)你的(de)(de)項目(mu)中使用,這(zhe)樣你的(de)(de)項目(mu)將(jiang)會變得(de)非常僵化(hua),很被動(dong)(dong),持久化(hua)無(wu)法(fa)自動(dong)(dong)切換,這(zhe)點(dian)要注意!
在具(ju)體項目(mu)中使用(yong)時,我們可以通過(guo)web.config去定(ding)義你持久(jiu)化的方(fang)式,在程序使用(yong)時,直接用(yong)Lind.DDD.IoC.ServiceLocator服(fu)務定(ding)位器(qi)即可.
IExtensionRepository<Task_Info> taskRepository; public UserService() { taskRepository = ServiceLocator.Instance.GetService<IExtensionRepository<Task_Info>>(); taskRepository.SetDataContext(Db); }
<unity xmlns="//schemas.microsoft.com/practices/2010/unity"> <container> <!--泛型類型注入--> <register type="Lind.DDD.IRepositories.IRepository`1,Lind.DDD" mapTo="Lind.DDD.Repositories.EF.EFRepository`1, Lind.DDD.Repositories.EF" /> <register type="Lind.DDD.IRepositories.IExtensionRepository`1,Lind.DDD" mapTo="Lind.DDD.Repositories.EF.EFRepository`1, Lind.DDD.Repositories.EF" /> </container> </unity>
最后,我(wo)們(men)非常希(xi)望(wang)各位同學(xue)(xue)都學(xue)(xue)有所成...