abp:什么是ABP? 2024-04-29 17:21:23 0 0 1、ABP背后的思想——DDD(领域驱动设计) ABP架构: ABP实现了多层架构(领域层,应用层,基础设施层和表示层),以及领域驱动设计(实体,存储库,领域服务,应用程序服务,DTO等)。还实现和提供了良好的基础设施来实现最佳实践,如依赖注入。 2、ABP——基于领域驱动设计的分层模型 2.1、什么是ABP ABP是“ASP.NET Boilerplate Project (ASP.NET样板项目)”的简称。 ASP.NET Boilerplate是一个用最佳实践和流行技术开发现代WEB应用程序的新起点,它旨在成为一个通用的WEB应用程序框架和项目模板。ABP是基于最新的ASP.NET CORE,ASP.NET MVC和Web API技术的应用程序框架。并使用流行的框架和库,它提供了便于使用的授权,依赖注入,验证,异常处理,本地化,日志记录,缓存等常用功能。 2.2、ABP的特点模块化——ABP模块化系统,以模块的形式体现多租户认证和授权后台作业AUTO API事件总监对象映射数据过滤AOP ABP是一套组合,AutoMapper\IdentityServer4\HangFire\.NET Core原生ID|Autofac,核心是ABP模块化系统,基础是领域驱动设计。 3、创建ABP的方式 方式1:使用ABP的模板,按照官网指示安装 ABP CLI,使用 ABP CLI 创建项目。 方式2:使用ABP的模板,直接在官网填写基本信息直接下载 方式3:在 Visual Studio 中创建 ASP.NET Core 新项目,引入 ABP 相关的包。 如果是快速开发可以使用 ABP 的模板,因为生成的项目比较复杂。如果想深入定制手动创建项目再引入 ABP 相关的包比较好。 4、模块 模块化的优点: 1)每个模块之间是没有必然联系的; 2)节约维护的成本; 模块之间需要依赖关系,并且有且只有一个启动模块,如果想应用其他模块,就需要在启动模块上添加依赖关系——DependsOn。 每个模块注册的服务,其实都注册到了全局容器中。 4.1、模块的类型: 1)应用程序模块:实现了特定的功能,通常有自己的服务、API和UI组件; 2)框架模块:框架的核心模块,比如缓存、安全、主题、序列化等,他们都是没有业务功能的,只是提供开发中的常用功能。 4.2、一个模块的生命周期: 模块配置、模块的初始化和模块的销毁 1)模块配置 当我们调用ABP模块的初始化方法的时候,模块的配置是最先被执行的。 模块配置会依此执行下列三个方法:public override voidPreConfigureService( );public override void ConfigureServices( );public override void PostConfigureServices( ); 2)模块的初始化 public override void OnPreApplicationInitialization( ); public override void OnApplicationInitialization( ); public override void OnPostApplicationInitialization( ); 3)模块的销毁 模块的存活期是跟随整个应用的,只有应用被终止,模块才会被销毁。 如果想在程序终止时,执行某段代码可使用: public override void OnPostApplicationShutdown( );方法 5、模块之间的依赖 A-》B-》D A-》C-》D 利用拓扑依赖算法,来根据依赖性确定模块的加载顺序: 先从最顶层的模块开始加载(D),然后依次往下,启动模块永远是最后被加载!(启动模块是唯一的) 所有模块都不可能依赖启动模块。 没有被依赖的模块不会被加载。 如:先加载AbpAspNetCoreMvcModule模块,再加载AbpModule模块 6、ABP的启动流程 最核心是初始化ABP各个模块。 1)注册ABP基础设施与核心服务(模块系统相关); 2)加载整个运用的所有模块,按照依赖性排序; 3)按顺序遍历所有模块,执行每一个模块的配置方法; 4)按顺序遍历所有模块,执行每一个模块的初始化方法 7、依赖注册的方式: 1)手动注册 通过配置方法中进行注册,也可以再Startup类中进行注册 2)自动注册按约定注册——ABP会根据一些类型进行自动注册按依赖接口注册: 依赖特性注册——可以通过特性方式定义 8、领域驱动设计 领域驱动设计(DDD)中,最重要的是领域层,领域层中最重要的就是领域模型。 领域模型关键部分:实体和值对象 1)实体:多个属性操作行为的一种载体,是领域模型的一种基础单元。 代码中是以实体类表现。 在系统运行中实体为一种领域对象,拥有唯一ID。 2)值对象 9、聚合以及聚合根: 1)聚合——实体组合而成,实体逻辑是紧密关联的(属于领域层)表示一种强关联的关系,是一种整体与部分的关系,不强调整体与部分的独立性;每一个聚合都对应一个仓储,以实现数据的持久化 2)聚合根——聚合的管理者每一个聚合都有一个聚合根;聚合根的目的:避免由于复杂的数据模型,缺少一个统一的业务规则控制,而导致聚合于实体之间不一致性的问题;聚合根本质上也是一个实体(根实体);聚合根与根具有相同的生命周期; 10、DDD的分层架构 11、什么是仓储?仓储是用来协调领域(实体)和数据映射层(ORM)的。仓储隔离了领域模型,使得只关注领域模型,而不考虑持久化仓储的作用对象是领域模型中的聚合根。 仓储限定了只能通过聚合根来持久化和检索领域对象,以确保所有的改动都有聚合来处理。 仓储通过隐藏聚合持久化和检索的底层技术,实现了领域层的持久化无关系。 仓储作为数据模型和领域模型的一个中介,负责映射领域模型到持久化存储。 收藏(0)