什么是ABP?

news2025/1/11 7:45:26

1、ABP背后的思想——DDD(领域驱动设计)

ABP架构:

ABP实现了多层架构(领域层,应用层,基础设施层和表示层),以及领域驱动设计(实体,存储库,领域服务,应用程序服务,DTO等)。还实现和提供了良好的基础设施来实现最佳实践,如依赖注入。

2ABP——基于领域驱动设计的分层模型

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.2ABP的特点

  • 模块化——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模块

6ABP的启动流程

最核心是初始化ABP各个模块

1)注册ABP基础设施与核心服务(模块系统相关);

2)加载整个运用的所有模块,按照依赖性排序;

3)按顺序遍历所有模块,执行每一个模块的配置方法;

4)按顺序遍历所有模块,执行每一个模块的初始化方法

7、依赖注册的方式:

1)手动注册

通过配置方法中进行注册,也可以再Startup类中进行注册

2)自动注册

  • 按约定注册——ABP会根据一些类型进行自动注册
  • 按依赖接口注册:

  • 依赖特性注册——可以通过特性方式定义

8、领域驱动设计

领域驱动设计(DDD)中,最重要的是领域层,领域层中最重要的就是领域模型。

领域模型关键部分:实体和值对象

1)实体:多个属性操作行为的一种载体,是领域模型的一种基础单元

代码中是以实体类表现。

在系统运行中实体为一种领域对象,拥有唯一ID

2)值对象

9、聚合以及聚合根:

1)聚合——实体组合而成,实体逻辑是紧密关联的(属于领域层)

  • 表示一种强关联的关系,是一种整体与部分的关系,不强调整体与部分的独立性;
  • 每一个聚合都对应一个仓储,以实现数据的持久化

2)聚合根——聚合的管理者

  • 每一个聚合都有一个聚合根
  • 聚合根的目的:避免由于复杂的数据模型,缺少一个统一的业务规则控制,而导致聚合于实体之间不一致性的问题;
  • 聚合根本质上也是一个实体(根实体);
  • 聚合根与根具有相同的生命周期;

10DDD的分层架构

11、什么是仓储?

  • 仓储是用来协调领域(实体)和数据映射层(ORM)的。
  • 仓储隔离了领域模型,使得只关注领域模型,而不考虑持久化
  • 仓储的作用对象是领域模型中的聚合根

仓储限定了只能通过聚合根来持久化和检索领域对象,以确保所有的改动都有聚合来处理。

仓储通过隐藏聚合持久化和检索的底层技术,实现了领域层的持久化无关系。

仓储作为数据模型和领域模型的一个中介,负责映射领域模型到持久化存储。

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/707097.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

(R)-tert-Bu4-DOTAGA,817562-90-6,(R)-DOTAGA-四叔丁酯,的反应特点及性质研究

​ 规格单位:g |货期:按​照具体的库存进行提供 | 纯度:95% 试剂描述: (R)-tert-Bu4-DOTAGA大环化合物是一种多齿配体,其配位原子位于环的骨架上,大环的配位原子可以是O、N、S、Se、P、As等。有二维的…

C++primer(第五版)第七章(类)

类的基本思想是数据抽象和封装. 数据抽象是一种依赖于接口和实现的分离的编程技术. 封装实现了类的接口和实现的分离. 7.1定义抽象数据类型 定义一个抽象数据类型使用关键字struct或是clas(差别仅在于默认访问权限修饰符). //这是一个简单的类定义 class Student{ …

C++ 结合 opencv读取图片与视频

C 结合 opencv读取图片与视频 文章目录 C 结合 opencv读取图片与视频一、安装opencv二 、配置文件准备2.1 新建立文件夹2.2 .vscode文件下配置文件(1)配置tasks.json文件(1)配置launch.json 三 、src文件下代码编写3.1 图片的读取…

matplotlib设置坐标轴为象限模式

import numpy as np import matplotlib.pyplot as pltx np.linspace(-np.pi, np.pi, 1000) cosy np.cos(x) siny np.sin(x)plt.xlim(min(x), max(x)) plt.ylim(min(cosy), max(cosy)0.5) plt.plot(x, cosy) plt.plot(x, siny) # 设置坐标刻度 plt.xticks([-np.pi, -np.pi/2,…

ubuntu安装python

ubuntu安装python 安装包下载 切换到想要的文件夹:如 cd /usr/local/python3 下载安装包 wget https://www.python.org/ftp/python/3.8.10/Python-3.8.10.tgz 网速慢的话也可以现在本电脑下载tgz文件,然后上传到服务器 第一次上传失败! Py…

SFP3012A-ASEMI代理海矽美快恢复二极管SFP3012A

编辑:ll SFP3012A-ASEMI代理海矽美快恢复二极管SFP3012A 型号:SFP3012A 品牌:MHCHXM(海矽美) 芯片个数:单芯片 封装:TO-247 恢复时间:≤75ns 工作温度:-40C~175C …

JS中的异步与Promise使用

同步与异步 我们知道JS是一个单线程的语言,即在同一时间只能做一件事情。为什么设计为当线程呢。?在早期JS是为了在浏览器中运行,我们可以利用JS来制作一些页面的效果也可以和用户做一些交互。所以设计为单线程也是为了避免复杂度。比如在网…

常见面试题之线程中并发锁(一)

1. 讲一下synchronized关键字的底层原理? 1.1. 基本使用 如下抢票的代码,如果不加锁,就会出现超卖或者一张票卖给多个人 Synchronized【对象锁】采用互斥的方式让同一时刻至多只有一个线程能持有【对象锁】,其它线程再想获取这…

常州工学院计算机组成原理(样卷)

微程序控制器:仿照程序设计的基本方法,将实现指令系统中所有指令所需要的所有控制信号按照一定的规则编码成微指令,若干条实现同一条指令功能的微指令构成一段微程序,将实现所有指令的微程序存放在一个只读存储器ROM中&#xff0c…

一套A股量化系统

shares A 股量化交易系统后台开发语言 Go/Python gmsec算法使用:pytorch全链路量化,行业板块分析,直接贴图。欢迎体验

【计算机视觉】最新综述:南洋理工和上海AI Lab提出基于Transformer的视觉分割综述

文章目录 一、导读二、摘要三、内容解读3.1 研究动机3.2 这篇综述的特色,以及与以往的Transformer综述有什么区别?3.3 Transformer-Based 分割和检测方法总结与对比3.4 相关研究领域的方法总结与对比3.5 不同方法的实验结果对比3.6 未来可以进行的方向 一…

vue三种方式导出报表至excel

1、序言 1.1、源码 源码在下方,复制运行,安装相应的插件即可 1.2、坑 方式一、方式二安装相同插件: npm install xlsx xlsx-style file-saver 导入 xlsx-style 会报如下的错误 解决办法: (1)去node_modules…

多元回归预测 | Matlab基于灰狼算法(GWO)优化混合核极限学习机HKELM回归预测, GWO-HKELM数据回归预测,多变量输入模型

文章目录 效果一览文章概述部分源码参考资料效果一览 文章概述 多元回归预测 | Matlab基于灰狼算法(GWO)优化混合核极限学习机HKELM回归预测, GWO-HKELM数据回归预测,多变量输入模型 评价指标包括:MAE、RMSE和R2等,代码质量极高,方便学习和替换数据。要求2018版本及以上。 …

基于matlab使用深度学习估计身体姿势(附源码)

一、前言 此示例演示如何使用 OpenPose 算法和预训练网络估计一个或多个人的身体姿势。 身体姿势估计的目标是识别图像中人的位置及其身体部位的方向。当场景中存在多个人时,由于遮挡、身体接触和相似身体部位的接近,姿势估计可能会更加困难。 有两种…

【手撕算法|动态规划系列No.1】leetcode1137. 第 N 个泰波那契数

个人主页:平行线也会相交 欢迎 点赞👍 收藏✨ 留言✉ 加关注💓本文由 平行线也会相交 原创 收录于专栏【手撕算法系列专栏】【LeetCode】 🍔本专栏旨在提高自己算法能力的同时,记录一下自己的学习过程,希望…

【C/C++】数组指针:array 地址 array *parray 两次解引用 **parray 值相同的原因解析

一、提出问题 #include <stdio.h>int main() { char array[16] {A, B}; char (*parray)[16] &array; printf("\n");printf(" array: \t%#lx\n", array); printf("& array: \t%#lx\n", &array); printf("…

SQL server 2012 配置数据库邮件实现邮件发送

日常开发中经常遇到邮件推送场景&#xff0c;我们可以利用SQL server也可以实现邮件发送功能。 一、配置邮件服务器 然后再弹出的页面中选择下一步 输入配置文件名&#xff0c;并添加新用户 在弹出的页面配置邮件服务器的地址、用户名、密码等相关信息 以上信息完成&#xff0…

树莓派 Raspberry Pi Zero 2W 安装默认系统时 ssh 登录并开启摄像头推流一段时间B

Raspberry Pi Zero 2W有点鸡肋&#xff0c;hdmi口用的microhdmi口&#xff0c;不是树莓派4b的minihdmi口&#xff0c;然后zero 2W也没有usb接口&#xff0c;有一个microusb安卓的otg接口&#xff0c;很烦&#xff0c;还好有wifi蓝牙模块&#xff0c;这样子还能ssh&#xff0c;不…

【冒泡排序】

前言 在计算机科学中&#xff0c;排序算法是一种常见且重要的算法。排序算法的目标是将一组无序的数据按照一定的规则进行重新排列&#xff0c;以便更方便地进行搜索、查找或其他操作。 冒泡排序&#xff08;Bubble Sort&#xff09;是最简单的排序算法之一&#xff0c;它的原…