定義倉儲


返回總目錄《一步一步使用ABP框架搭建正式項目系列教程》


在DDD(領域驅動設計)設計中,倉儲實現了對數據進行特定操作的代碼。ABP使用泛型IRepository接口為每一個實體創建了一個自動的倉儲。IRepository定義了select,

insert,update和一些更多的通用方法:

ABP框架已經內置了這么多常用的操作方法,當然,我們也可以根據自己的需求擴展這些倉儲。比如,在我的項目中,有一個省份表和城市表,省份表有一個省份編碼字段

Code,每一個城市都對應一個省份,省份和城市之間是一對多的關系,城市表有一個ProvinceCode字段,對應省份表的Code字段。現在有這么個需求,根據省份編碼獲得

該省份的所有城市。這個需求ABP框架沒有實現,所以我們必須自己實現。因而我要創建一個City倉儲。因為我要把接口和實現分離,所以我要首先聲明倉儲的接口。

這里是我定義的City倉儲接口ICityRepository:

    public interface ICityRepository:IRepository<Cities>
    {
        List<Cities> GetCitiesWithProvince(string provinceCode);
    }

該接口擴展了ABP框架的泛型IRepository接口,因此,ICityRepository默認繼承定義了所有這些方法。正如我這里自己定義的GetCitiesWithProvince(…)方法,

也可以添加自己的方法。如果默認的方法足夠使用,就不需要創建實體的倉儲了。ABP提供了一種不需要創建倉儲類就能注射泛型倉儲的方式。

    public class ProvinceAppService:ChargeStationAppServiceBase,IProvinceAppService
    {
        private IRepository<Provinces> _provinceRepository;

        public ProvinceAppService(IRepository<Provinces> provinceRepository)
        {
            _provinceRepository = provinceRepository;
        }
        public void CreateProvince(ProvinceInput input)
        {
            //DoSomething
        }
    }

省份實體類不需要其他的自定義方法,使用ABP框架的IReposity接口定義的方法就足夠了,因而不需要在領域層定義倉儲接口。以上代碼是在ABP的應用服務層定義的關於

省份的服務類,雖然沒有省份的相應倉儲,但是依然通過泛型的IRepository進行了構造函數的依賴注入。我們依然可以在此服務類中使用該接口通用的方法。

 

在ABP框架中,倉儲接口定義在Core項目中,因為它們是領域/業務層的一部分。所以我們最好在Core項目層中定義一個IRepositories文件夾,存放所有的實體倉儲接口。

今晚就到這里吧,下一篇我們講《實現倉儲》。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM