定义仓储

返回总目录《一步一步使用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文件夹,存放所有的实体仓储接口。

今晚就到这里吧,下一篇我们讲《实现仓储》。

posted @   tkbSimplest  阅读(14763)  评论(2编辑  收藏  举报
编辑推荐:
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
阅读排行:
· winform 绘制太阳,地球,月球 运作规律
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)

喜欢请打赏

扫描二维码打赏

支付宝打赏

点击右上角即可分享
微信分享提示