ABP实践(一) 创建ABP项目
ABP是一个开源应用程序框架,专注于基于ASP.NET Core的Web应用程序开发,但也支持开发其他类型的应用程序.ABP整合了.net开发中的各种技术
文档:https://docs.abp.io/zh-Hans/abp/latest/Getting-Started
新版的ABP需要依赖.NET 6的环境,需要先安装对应的SDK
一.安装ABP
dotnet tool install -g Volo.Abp.Cli
二.创建项目
这里使用ABP CLI来进行创建
abp new ABP.Demo -u mvc -d ef -dbms MySQL -o "D:\ABPDemo"
new的常用命令
--output-folder
或者-o
: 指定输出文件夹,默认是当前目录.--ui
或者-u
: 指定ui框架.默认mvc
框架.其他选项 (mvc、angular、blazor、none)--database-provider
或者-d
: 指定数据库提供程序.默认是ef
.其他选项(ef、mongodb)- -dbms:指定数据库类型
三.生成的代码结构
项目结构
项目组织在src
和test
文件夹中. src
文件夹包含实际应用程序,该应用程序基于前面提到的DDD原则进行分层. 下图展示了解决方案的层和项目的依赖关系:
-
Domain.Shared 项目
- 项目包含常量,枚举和其他对象,这些对象实际上是领域层的一部分,但是解决方案中所有的层/项目中都会使用到.
- 该项目不依赖解决方案中的其他项目. 其他项目直接或间接依赖该项目
-
Domain 项目
- 解决方案的领域层. 它主要包含 实体, 集合根, 领域服务, 值类型, 仓储接口 和解决方案的其他领域对象.
- 它依赖
.Domain.Shared
项目,因为项目中会用到它的一些常量,枚举和定义其他对象.
-
Application.Contracts 项目
- 项目主要包含 应用服务 interfaces 和应用层的 数据传输对象 (DTO). 它用于分离应用层的接口和实现. 这种方式可以将接口项目做为约定包共享给客户端.
- 它依赖
.Domain.Shared
因为它可能会在应用接口和DTO中使用常量,枚举和其他的共享对象.
-
Application 项目
- 项目包含
.Application.Contracts
项目的 应用服务 接口实现. - 它依赖
.Application.Contracts
项目, 因为它需要实现接口与使用DTO. - 它依赖
.Domain
项目,因为它需要使用领域对象(实体,仓储接口等)执行应用程序逻辑.
- 项目包含
-
.EntityFrameworkCore 项目
- 这是集成EF Core的项目. 它定义了
DbContext
并实现.Domain
项目中定义的仓储接口. - 它依赖
.Domain
项目,因为它需要引用实体和仓储接口.
- 这是集成EF Core的项目. 它定义了
-
.EntityFrameworkCore.DbMigrations 项目
- 包含解决方案的EF Core数据库迁移. 它有独立的
DbContext
来专门管理迁移.(ABP是一个模块化的框架,理想的设计是让每个模块都有自己的DbContext
类. 这时用于迁移的DbContext
就会发挥作用. 它将所有的DbContext
配置统一到单个模型中以维护单个数据库的模式. 对于更高级的场景,可以程序可以拥有多个数据库(每个数据库有一个或多个模块表)和多个迁移DbContext
(每个都维护不同的数据库模式)) - 它依赖
.EntityFrameworkCore
项目,因为它重用了应用程序的DbContext
配置 .
- 包含解决方案的EF Core数据库迁移. 它有独立的
-
.DbMigrator 项目
- 必要时创建数据库(没有数据库时).
- 应用未迁移的数据库迁移.
- 初始化种子数据(当你需要时).
- 它依赖
.EntityFrameworkCore.DbMigrations
项目 (针对EF Core),因为它需要访问迁移文件. - 它依赖
.Application.Contracts
项目,因为它需要访问权限定义在初始化种子数据时为管理员用户赋予所有权限.
-
.HttpApi 项目
- 用于定义API控制器.
- 它依赖
.Application.Contracts
项目,因为它需要注入应用服务接口.
-
.HttpApi.Client 项目
- 定义C#客户端代理使用解决方案的HTTP API项目. 可以将上编辑共享给第三方客户端,使其轻松的在DotNet应用程序中使用你的HTTP API(其他类型的应用程序可以手动或使用其平台的工具来使用你的API).
- 它依赖
.Application.Contracts
项目,因为它需要使用应用服务接口和DTO.
-
.Web 项目
-
包含应用程序的用户界面(UI).如果使用ASP.NET Core MVC UI, 它包括Razor页面,javascript文件,样式文件,图片等...包含应用程序主要的
appsettings.json
配置文件,用于配置数据库连接字符串和应用程序的其他配置 - 依赖
.HttpApi
项目,因为UI层需要使用解决方案的API和应用服务接口.
-
-
Test 项目
-
.Domain.Tests
用于测试领域层..Application.Tests
用于测试应用层..EntityFrameworkCore.Tests
用于测试EF Core配置与自定义仓储..Web.Tests
用于测试UI(适用于ASP.NET Core MVC UI)..TestBase
所有测试项目的基础(共享)项目.
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· Docker 太简单,K8s 太复杂?w7panel 让容器管理更轻松!