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 框架利用就是这个根底上扩大本人的业务我的项目。这个局部,咱们能够依据官网上进行肯定的选项配置,而后下载应用。
根底构造组成部分
Package | Status |
---|---|
Abp NuGet | version |
Abp.AspNetCore | NuGet version |
Abp.Web.Common | NuGet version |
Abp.Web NuGet | version |
Abp.Web.Mvc NuGet | version |
Abp.Web.Api NuGet | version |
Abp.Web.Api.OData | NuGet version |
Abp.Web.Resources | NuGet version |
Abp.Web.SignalR | NuGet version |
Abp.Owin | NuGet version |
Abp.EntityFramework.Common | NuGet version |
Abp.EntityFramework | NuGet version |
Abp.EntityFramework.GraphDiff | NuGet version |
Abp.EntityFrameworkCore | NuGet version |
Abp.NHibernate | NuGet version |
Abp.Dapper | NuGet version |
Abp.FluentMigrator | NuGet version |
Abp.AspNetCore | NuGet version |
Abp.AspNetCore.SignalR | NuGet version |
Abp.AutoMapper | NuGet version |
Abp.HangFire | NuGet version |
Abp.HangFire.AspNetCore | NuGet version |
Abp.Castle.Log4Net | NuGet version |
Abp.RedisCache | NuGet version |
Abp.RedisCache.ProtoBuf | NuGet version |
Abp.MailKit | NuGet version |
Abp.Quartz | NuGet version |
Abp.TestBase | NuGet version |
Abp.AspNetCore.TestBase | NuGet 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 的内存数据库,不影响理论数据库内容。