ABP框架
一、简介
开源、文档友好的应用程序框架。
提供基于领域驱动设计【DDD】的体系结构模型,支持.Net FrameWork、.Net Core。
二、特点
- 依赖注入。这个部分使用 Castle windsor (依赖注入容器)来实现依赖注入,这个也是我们经常使用IOC来处理的方式;
- 仓储模式。已实现了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层使用。
三、特别功能
- 多租户支持。每个租户的数据自动隔离,业务模块开发者不需要在保存和查询数据时写相应代码;
- 软删除支持。继承相应的基类或实现相应接口,会自动实现软删除;
- 系统设置存取管理。系统级、租户级、用户级,作用范围自动管理;
- EventBus实现领域事件。Domain Events;
- 模块以及模块的依赖关系实现插件化的模块处理等。
四、框架分层架构图
前后端分离的思想,不仅仅可以应用在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框架应用就是这个基础上扩展自己的业务项目。这个部分,我们可以根据官网上进行一定的选项配置,然后下载使用。
6.1、基础结构组成部分
项目分层解析:
1、Application应用层:应用层提供一些应用服务(Application Services)方法供展现层调用。一个应用服务方法接收一个DTO(数据传输对象)作为输入参数,使用这个输入参数执行特定的领域层操作,并根据需要可返回另一个DTO。
2、Core领域核心层,领域层就是业务层,是一个项目的核心,所有业务规则都应该在领域层实现。这个项目里面,除了定义所需的领域实体类外,其实可以定义我们自己的自定义的仓储对象(类似DAL/IDAL),以及定义自己的业务逻辑层(类似BLL/IBLL),以及基于AutoMapper映射规则等内容。
3、Core领域核心层,领域层就是业务层,是一个项目的核心,所有业务规则都应该在领域层实现。这个项目里面,除了定义所需的领域实体类外,其实可以定义我们自己的自定义的仓储对象(类似DAL/IDAL),以及定义自己的业务逻辑层(类似BLL/IBLL),以及基于AutoMapper映射规则等内容。
4、Migrator数据迁移层,这个是一个辅助创建的控制台程序项目,如果基于DB First,我们可以利用它来创建我们项目的初始化数据库。
5、Web.Core Web核心层,基于Web或者Web API的核心层,提供了对身份登陆验证的基础处理,没有其他内容。
6、Web.Core.Host Web API的宿主层,也是动态发布Web API的核心内容,另外在Web API里面整合了Swagger,使得我们可以方便对Web API的接口进行调试。
7、Tests 单元测试层,这个提供了一些应用层对象的模拟测试,其中测试的数据库使用的是Entity Framework 的内存数据库,不影响实际数据库内容。