1. 程式人生 > >Lind.DDD.Repositories.EF層介紹

Lind.DDD.Repositories.EF層介紹

vfp jcs pic udf vdc 類型 wax 程序 s2d

倉儲大叔好了相贈 網上2500元 跟誰學課堂 C#視頻 ddd領域驅動架構設計視頻 還贈送ABP視頻兩套

qq 2589406800 qq1399494644 qq2128543647 qq2890083872 qq3235634116 qq3381945576 qq2171713479
源代碼框架lind.ddd(後臺管理系統,電商系統,API,SSO,xamarin,ko,各組件單元測試) 贈送ABP視頻
+lindCore源碼+LindAgility(敏捷框架) (60元)

Lind.DDD.Repositories.EF以下簡稱Repositories.EF,之所以把它從Lind.DDD中拿出來,完全出於可插拔的考慮,讓大家都能休會到IoC的魅力,用到哪種方法持久化,就將那個DLL放到應用程序中,完全不需要把所有持久化方式耦合到一個項目裏,這也是遵循了OCP的原則,對擴展是開放的,即你可以添加其它的持久化方式,在新的項目裏;而不要在原有的項目中進行代碼的修改.

Repositories.EF做為數據持久化的一種方式,它直接繼承了Lind.DDD.IRepositories接口模塊,它實現了IRepository,IExtensionRepository和IOrderableRepository等倉儲操作,開發人員在使用時,可以根據自己的需要去聲明不同的接口變量,以最小程度的使用它,而不是所以時候都使用IExtensionRepository的完整接口,如你的類中只用到了實體的添加,那你完全可以把對象聲明成IRepository基本倉儲,這樣你的使用時,也更加清楚.

Repositories.EF項目結構很簡單,只有一個Repository的實現,看一下結構圖

技術分享

它內部使用了IExtensionRepository接口,由於IExtensionRepository同時繼承了IRepository和IOrderableRepository,所以,EF在實現它時,這兩個基接口也會現時被實現.

技術分享

其實對於方法內部的實現,大叔之前的文章中已經介紹很多了,大叔可以自已進行查閱,之後這個Repositories.EF倉儲在實現項目中不會出現,它只會通過IoC在程序運行時動態生產出來,這點大叔要清楚,不要把Repositories.EF引用到你的項目中使用,這樣你的項目將會變得非常僵化,很被動,持久化無法自動切換,這點要註意!

在具體項目中使用時,我們可以通過web.config去定義你持久化的方式,在程序使用時,直接用Lind.DDD.IoC.ServiceLocator服務定位器即可.

技術分享
        IExtensionRepository<Task_Info> taskRepository;
        public UserService()
        {          
            taskRepository = ServiceLocator.Instance.GetService<IExtensionRepository<Task_Info>>();
            taskRepository.SetDataContext(Db);
        }
技術分享 技術分享
  <unity xmlns="http://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>
技術分享

Lind.DDD.Repositories.EF層介紹