ABP 框架基础知识

ABP是一个开源且文档敌对的应用程序框架。ABP不仅仅是一个框架,它还提供了一个最徍实际的基于畛域驱动设计(DDD)的体系结构模型,能够反对 .net framework和 .net core两种技术流派。

ABP 框架特点

  • 依赖注入,这个局部应用 Castle windsor (依赖注入容器)来实现依赖注入,这个也是咱们常常应用IOC来解决的形式;
  • Repository仓储模式,已实现了Entity Framework、NHibernate、MangoDB、内存数据库等,仓储模式能够疾速实现对数据接口的调用;
  • 身份验证与受权治理,能够应用申明个性的形式对用户是否登录,或者接口的权限进行验证,能够通过一个很细粒度的形式,对各个接口的调用权限进行设置;
  • 数据有效性验证,ABP主动对接口的输出参数对象进行非空判断,并且能够依据属性的申请信息对属性的有效性进行校验;
  • 审计日志记录,也就是记录咱们对每个接口的调用记录,以及对记录的创立、批改、删除人员进行记录等解决;
  • Unit Of Work工作单元模式,为应用层和仓储层的办法主动实现数据库事务,默认所有应用服务层的接口,都是以工作单元形式运行,即便它们调用了不同的存储对象解决,都是处于一个事务的逻辑外面;
  • 异样解决,ABP框架提供了一整套比较完善的流程解决操作,能够很不便的对异样进行进行记录和传递;
  • 日志记录,我么能够利用Log4Net进行惯例的日志记录,不便咱们跟踪程序处理信息和错误信息;
  • 多语言/本地化反对,ABP框架对多语言的解决也是比拟敌对的,提供了对XML、JSON语言信息的配置解决;
  • Auto Mapping主动映射,这个是ABP的很重要的对象隔离概念,通过应用AutoMaper来实现域对象和DTO对象的属性映射,能够隔离两者的逻辑关系,然而又能轻松实现属性信息的赋值;
  • 动静Web API层,利用这个动静解决,能够把Application Service 间接公布为Web API层,而不须要在累赘的为每个业务对象手工创立一个Web API的控制器,十分不便;
  • 动静JavaScript的AJax代理解决,能够主动创立Javascript 的代理层来更方便使用Web Api,这个在Web层应用。

ABP 框架特地的性能

  • 多租户反对(每个租户的数据主动隔离,业务模块开发者不须要在保留和查问数据时写相应代码;
  • 软删除反对(继承相应的基类或实现相应接口,会主动实现软删除)
  • 零碎设置存取治理(零碎级、租户级、用户级,作用范畴主动治理)
  • EventBus实现畛域事件(Domain Events)
  • 模块以及模块的依赖关系实现插件化的模块解决等等

ABP框架分层架构图

前后端拆散的思维,不仅仅能够利用在Web的B/S开发,同时实用于C/S开发

  • 前端Web端能够应用Ant-Design(React)、IView(VUE)、Angular等不同的前端技术来承载界面出现层
  • 前端Client 桌面端能够应用MaterialDesign 设计规范,依照Prism或者MVMMLight 的MVMVM框架联合利用起来

WEB API 优先的架构

ABP 框架的外围次要以.NET的后端技术栈为主线,尽管ASP.NET CORE MVC和 Web API 分成了两局部,然而他的动静公布为Web API无限的架构提供了更好的便当。

在当今风行的展示层中,越来越不依赖于后端的技术实现,而侧重于Web API标准化的对接,基于JSON数据的交互解决。不论是以Ant-Design(React)、IView(VUE)、Angular等技术利用的Web前端,咱们能够看到这些架构很容易实现对Web API的标准接口对接,在我较早提供的Winform混合框架外面,也是以Web API优先的策略进行云端利用的部署

ABP 框架的我的项目构造

ABP 框架蕴含了两个局部,一个根底的ABP框架,一个ABP根底框架上的扩大利用。提供了人员人员、角色、权限、会话、身份验证、多租户、日志记录等等内容,咱们个别指的ABP框架利用就是这个根底上扩大本人的业务我的项目。这个局部,咱们能够依据官网上进行肯定的选项配置,而后下载应用。

根底构造组成部分

PackageStatus
Abp NuGetversion
Abp.AspNetCoreNuGet version
Abp.Web.CommonNuGet version
Abp.Web NuGetversion
Abp.Web.Mvc NuGetversion
Abp.Web.Api NuGetversion
Abp.Web.Api.ODataNuGet version
Abp.Web.ResourcesNuGet version
Abp.Web.SignalRNuGet version
Abp.OwinNuGet version
Abp.EntityFramework.CommonNuGet version
Abp.EntityFrameworkNuGet version
Abp.EntityFramework.GraphDiffNuGet version
Abp.EntityFrameworkCoreNuGet version
Abp.NHibernateNuGet version
Abp.DapperNuGet version
Abp.FluentMigratorNuGet version
Abp.AspNetCoreNuGet version
Abp.AspNetCore.SignalRNuGet version
Abp.AutoMapperNuGet version
Abp.HangFireNuGet version
Abp.HangFire.AspNetCoreNuGet version
Abp.Castle.Log4NetNuGet version
Abp.RedisCacheNuGet version
Abp.RedisCache.ProtoBufNuGet version
Abp.MailKitNuGet version
Abp.QuartzNuGet version
Abp.TestBaseNuGet version
Abp.AspNetCore.TestBaseNuGet version

扩大利用模板款式如下,需到官网下载

下载.net core 我的项目后,其中后端局部的我的项目视图如下所示

咱们从这个我的项目外面能够看到,它次要是分为上面几个我的项目分层。

  • Application应用层:应用层提供一些应用服务(Application Services)办法供展示层调用。一个应用服务办法接管一个DTO(数据传输对象)作为输出参数,应用这个输出参数执行特定的畛域层操作,并依据须要可返回另一个DTO。
  • Core畛域核心层,畛域层就是业务层,是一个我的项目的外围,所有业务规定都应该在畛域层实现。这个我的项目外面,除了定义所需的畛域实体类外,其实能够定义咱们本人的自定义的仓储对象(相似DAL/IDAL),以及定义本人的业务逻辑层(相似BLL/IBLL),以及基于AutoMapper映射规定等内容。
  • EntityFrameworkCore 实体框架核心层,这个我的项目不须要批改太多内容,只须要在DbContext外面退出对应畛域对象的仓储对象即可。
  • Migrator数据迁徙层,这个是一个辅助创立的控制台程序我的项目,如果基于DB First,咱们能够利用它来创立咱们我的项目的初始化数据库。
  • Web.Core Web核心层,基于Web或者Web API的核心层,提供了对身份登陆验证的根底解决,没有其余内容。
  • Web.Core.Host Web API的宿主层,也是动静公布Web API的核心内容,另外在Web API外面整合了Swagger,使得咱们能够不便对Web API的接口进行调试。
  • Tests 单元测试层,这个提供了一些应用层对象的模仿测试,其中测试的数据库应用的是Entity Framework 的内存数据库,不影响理论数据库内容。