当前位置:网站首页>ABP 学习解决方案中的项目以及依赖关系
ABP 学习解决方案中的项目以及依赖关系
2022-07-01 06:06:00 【旧时量刑】
.Domain.Share 项目
该项目包含常量、枚举和其他对象,这些对象实际上是领域层的一部分,但是解决方案中所有层/项目都会使用到。例如实体类Book中用到的枚举BookType、常量
BookConsts都适合放在这个项目要中。
该项目不依赖解决方案中的其他项目,其他项目简介或直接依赖该项目该项目
.Domain 项目
解决方案中的领域层,包含 实体,集合根,领域服务,值类型,仓储接口和解决方案的其他领域对象。例如实体和IBookRepository类都适合放在这个项目中
它依赖.Domain.Share 因为他可能会在应用接口和DTO中使用常量、枚举或者其他的共享对象。
.Application.Contracts 项目
项目主要包含应用服务interfaces和应用层的数据传输对象DTO,它用于分离应用层的接口和实现,这种方式可以将接口项目作为约定包共享给客户端。
例如 IBookAppService接口和BookCreationDto类都适合放在这个项目中
它依赖与.Domain.Share因为 他可能会在应用接口和DTO中使用常量、枚举或者其他的共享对象。
.Application 项目
项目包含 .Application.COntracts项目的应用服务接口的实现。
例如BookAppService类适合放在这个项目中
它依赖.Application.Cantracts项目,因为它需要实现接口与使用DTO 它依赖与.Domain.Share因为 他可能会在应用接口和DTO中使用常量、枚举或者其他的共享对象。
.EntityFrameworkCore 项目
集成EF Core项目,定义了DbContext并实现.Domain项目中定义的仓储接口
它依赖.Domain项目。因为它需要引用实体和仓储接口
.EntityFrameworkCore.DbMigrations项目
包含解决方案中EF Core的数据库迁移,它有独立的DbContext来专门管理迁移
ABP是一个模块化的框架,理想的设计是让每个模块都有自己的DbContext类,这是用于迁移的DbContext就会发挥作用,他将所有的DbContext配置统一到单个模型中以维护单个数据库的模式,对于更高级的场景,程序可以拥有多个数据库(每个数据库有一个或多个模块表)和多个迁移
DbContext(每个都维护不同的数据库模式)
需要注意,迁移
DbContext仅用于数据库迁移,而不在运行时使用.
- 它依赖
.EntityFrameworkCore项目,因为它重用了应用程序的DbContext配置
.DbMigrator项目
这是一个控制台应用程序,它简化了在开发和生产环境执行数据库迁移的操作,当你使用它时:
必须时创建数据库(没有数据库时)
应用未迁移的数据迁移
初始化种子数据(当你需要时)
虽然创建数据库和应用迁移似乎只对关系数据库有用,但即使你选择NoSQL数据库提供程序(如MongoDB),也会生成此项目. 这时,它会为应用程序提供必要的初始数据.
- 它依赖
.EntityFrameworkCore.DbMigrations项目 (针对EF Core),因为它需要访问迁移文件.- 它依赖
.Application.Contracts项目,因为它需要访问权限定义在初始化种子数据时为管理员用户赋予所有权限.
.HttpApi项目
用于定义API控制器
大多数情况下,你不需要手动定义API控制器,因为ABP的动态API功能会根据的应用层自动创建API控制器,但是如果你需要编写API控制器,那么它是最合适的地方
它依赖.Application.Contracts项目,因为它需要注入应用服务接口
.HttpApi.Client项目
定义C#客户端代理使用解决方案中的Http API项目,可以将上编辑共享给第三方客户端,使其轻松的在DotNet应用程序中使用你的http API
ABP有动态 C# API 客户端功能,所以大多数情况下你不需要手动的创建C#客户端代理.
.HttpApi.Client.ConsoleTestApp项目是一个用于演示客户端代理用法的控制台应用程序.
- 它依赖
.Application.Contracts项目,因为它需要使用应用服务接口和DTO.如果你不需要为API创建动态C#客户端代理,可以删除此项目和依赖项
.Web项目
包含应用程序的用户界面(UI)。如果使用ASP.NET Core MVC UI,包含应用程序主要的
appsettings.json配置文件,用于配置数据库连接字符串和应用程序的其他配置
依赖
.HttpApi项目,因为UI层需要使用解决方案的API和应用服务接口.
.分层结构
如果你选择了 ASP.NET core UI 并指定了 --tiered选项,CLI会创建分层解决方案,分层结构的目的是将Web应用程序和Http Api部署到不同的服务器
参考文件:Startup Templates/Application | Documentation Center | ABP.IO
写这篇文章的目的是为了方便自己学习ABP
边栏推荐
- QT write custom control - self drawn battery
- It's not that you have a bad mind, but that you haven't found the right tool
- Skywalking integrated Nacos dynamic configuration
- Talking from mlperf: how to lead the next wave of AI accelerator
- excel初级应用案例——杜邦分析仪
- SystemVerilog学习-09-进程间同步、通信和虚方法
- 穿越派与贸大合作,为大学生增添效率
- el-table 动态表头渲染 固定第一列 高度问题
- Fixed height of the first column in El table dynamic header rendering
- Timer based on LabVIEW
猜你喜欢

3D printer threading: five simple solutions

分布式锁实现

4GB大文件,如何实时远程传输和共享?

Dear pie users, I want to confess to you!

jdbc 数据库操作

Leetcode Max rectangle, Max square series 84 85. 221. 1277. 1725. (monotonic stack, dynamic programming)

从诺奖知“边缘计算”的未来!

Database problems, how to optimize Oracle SQL query statements faster and more efficient

Transformer le village de tiantou en un village de betteraves sucrières

这才是大学生必备软件 | 知识管理
随机推荐
kotlin位运算的坑(bytes[i] and 0xff 报错)
Send you through the data cloud
【文件系统】如何在ubi之上运行squashfs
69 Cesium代码datasource加载geojson
论文学习记录随笔 多标签之GLOCAL
excel可视化
MySQL中 in 和 exists 的区别
Talking from mlperf: how to lead the next wave of AI accelerator
68 cesium code datasource loading czml
Differences between in and exists in MySQL
OpenGL ES: (3) EGL、EGL绘图的基本步骤、EGLSurface、ANativeWindow
OpenGL es: (1) origin of OpenGL es (transfer)
千万不要把笔记视频乱放!
PLA不粘貼在床上:6個簡單的解决方案
Save data in browser to local file
Flink实战--多流合并
1034 Head of a Gang
Highmap gejson data format conversion script
关于一道01背包问题的·拓展题的思考
Multi label lsml for essay learning records