定义仓储

简介:

在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文件夹,存放所有的实体仓储接口。

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





本文转自tkbSimplest博客园博客,原文链接:http://www.cnblogs.com/farb/p/4926493.html,如需转载请自行联系原作者

目录
相关文章
|
2月前
|
安全
仓储设计实现问题之在taskOf()方法中仓储实现对实体的跟踪的如何解决
仓储设计实现问题之在taskOf()方法中仓储实现对实体的跟踪的如何解决
|
2月前
|
索引 容器
仓储设计实现问题之仓储设计时考虑放置实体的问题如何解决
仓储设计实现问题之仓储设计时考虑放置实体的问题如何解决
25 0
仓储设计实现问题之仓储设计时考虑放置实体的问题如何解决
|
2月前
|
测试技术 数据库连接 数据库
仓储设计实现问题之仓储生成聚合实体的唯一标识如何解决
仓储设计实现问题之仓储生成聚合实体的唯一标识如何解决
33 0
|
2月前
仓储设计实现问题之仓储应该是一个集合实例,并且无法对仓储进行重复的放置如何解决
仓储设计实现问题之仓储应该是一个集合实例,并且无法对仓储进行重复的放置如何解决
24 0
|
2月前
|
存储 测试技术 数据库
仓储设计实现问题之聚合实体在DDD中定义如何解决
仓储设计实现问题之聚合实体在DDD中定义如何解决
41 0
|
2月前
|
调度
仓储设计实现问题之这种仓储下的聚合实体看起来更加像资源Resource如何解决
仓储设计实现问题之这种仓储下的聚合实体看起来更加像资源Resource如何解决
27 0
|
2月前
|
存储 SQL NoSQL
仓储设计实现问题之在仓储实体转移模式下处理聚合实体的删除如何解决
仓储设计实现问题之在仓储实体转移模式下处理聚合实体的删除如何解决
|
2月前
|
存储 中间件
仓储设计实现问题之不应该把diff逻辑写在领域服务中,而是应该写在仓储中如何解决
仓储设计实现问题之不应该把diff逻辑写在领域服务中,而是应该写在仓储中如何解决
|
2月前
|
存储
仓储设计实现问题之仓储层需要与领域模型保持解耦如何解决
仓储设计实现问题之仓储层需要与领域模型保持解耦如何解决
|
3月前
|
搜索推荐
领域驱动概念问题之在领域驱动设计中,聚合和实体分别是什么
领域驱动概念问题之在领域驱动设计中,聚合和实体分别是什么