zoukankan      html  css  js  c++  java
  • 定义仓储

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

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

  • 相关阅读:
    CSS选择器
    CSS选择器详解(二)通用选择器和高级选择器
    CSS选择器详解(一)常用选择器
    30个最常用css选择器解析
    常用CSS缩写语法总结
    XHTML 代码规范
    命名空间(xmlns属性)
    HTML 5 <meta> 标签
    HTML <!DOCTYPE> 标签
    Mybatis-generator 逆向工程
  • 原文地址:https://www.cnblogs.com/farb/p/4926493.html
Copyright © 2011-2022 走看看