第2章 开始使用 ABP Framework
ABP Framework 由多个 NuGet 包和 NPM 包组成,这些包是按照模块化设计的,所以可以按需使用这些包。同时提供预建的解决方案启动模板,通常使用这些模板开始项目开发。
本章介绍如何准备开发环境,如何使用ABP启动模板创建解决方案;在本章最后,你将得到一个基于ABP Framework的可运行解决方案。
本章包含以下主题:
- 安装 ABP CLI
- 创建新解决方案
- 运行解决方案
- 浏览预制模块
技术需求
在开始使用 ABP Framework 之前,你需要提前安装以下工具。
IDE/编辑器
假设你使用 Visual Studio 2019(v16.8 支持 .NET 5)或更高版本。如果你还没有安装,可以安装免费的社区版,下载地址:https://visualstudio.microsoft.com 。
当然,可以使用任何喜欢的IDE或编辑器,只要他支持使用C#语言进行 .NET 应用开发。
.NET 6 SDK
如果已经安装 Visual Studio,就已经安装 .NET SDK 。另外,请安装 .NET 6 或更高版本:https://dotnet.microsoft.com/download 。
数据库管理系统
ABP Framework 支持任何数据源。集成两种提供程序:Entity Framework Core (EF Core) 和 MongoDB 。基于 EF Core 所有数据库管理系统(DBMS)都可支持,比如:SQL Server、MySQL、PostgreSQL、Oracle 等。
本章使用 SQL Server 作为 DBMS。启动解决方案使用 LocalDB,一个使用 Visual Studio 安装,用于开发用的简单的 SQL Server 实例。当然,你可能希望使用全功能版本 SQL Server,可以下载 SQL Server 开发版:https://www.microsoft.com/sql-server/sql-server-downloads 。
安装 ABP CLI
许多现代框架提供 CLI (Command Line Interface),ABP Framework 也不例外。ABP CLI 是一个命令行工具,用来处理 ABP 应用中的公共任务。使用它可以创建基于 ABP Framework 包含基础功能的解决方案。
使用终端执行以下命令,进行安装:
dotnet tool install -g Volo.Abp.Cli
使用如下命令更新到最新版本:
dotnet tool update -g Volo.Abp.Cli
我们现在已经准备好开始创建新的 API 解决方案了。
创建一个新的解决方案
ABP Framework 提供预建应用程序启动模板,有两种方式可以基于此模板创建新的解决方案,我们在后面还会对模板进行进一步分析。
下载解决方案启动模板
可以直接从:https://abp.io/get-started 创建并下载解决方案 。在页面中,你可以选择 UI 框架类型、数据库提供程序 和 其他提供的选项:
该页面中的选项值得我们注意,因为它们直接影响解决方案架构、结构和工具链。
Project name 是解决方案名称和根命名空间。
提供两种 项目类型 :
- Module 模板,用于创建可重用应用模块。
- Application 模板,用于构建 WEB 应用程序。
我们将在 第15章 模块化开发 介绍如何使用应用模块,本章我们选择 Application 模板创建一个新的WEB应用程序,并且还会在下一章使用。
截止到本教程编写时,UI Framework 选项提供四个:
- MVC / Razor Page
- Angular
- Blazor WebAssembly
- Blazor Server
通过该选项,可以选择最适合你的应用程序需求的 UI 框架,MVC / Razor Page 和 Blazor 选项将会在本教程 第4部分 用户界面和API开发 介绍。这里我们选择 MVC / Razor Page 选项。
截止本教程编写时,提供两个数据库提供程序选项:
- Entity Framework Core
- MongoDB
如果选择 Entity Framework Core 选项,可以使用任何支持 EF Core 的数据库管理系统。这里我们选择支持 EF Core 的 SQL Server 数据库。
ABP 还提供基于 React Native 的移动应用启动模板,这是一个由 Facebook 开源的 SPA (Single-Page Application) 框架。该模板为移动应用集成后端服务提供了一个良好的开端,本教程不会涉及移动应用开发,所以该选项设置为 None 。
最后,Tiered 选项,设置是否将 UI 应用程序与 HTTP API 应用程序进行分离。选中该选项,UI 应用程序不会直接连接数据库,所有操作通过 HTTP API 处理。UI 和 HTTP API 应用可以部署在不同的服务器上。本示例中,我们没有选中该选项,为了保持解决方案结构足够简单,从而聚焦 ABP 功能,避免提前引入分布式系统复杂性。当然,ABP 充分支持分布式场景。
当设置好这些选项时,就创建了一个完全可运行、可用于生产环境的解决方案,在此基础上可以开始构建你的应用程序。如果后面想改变某些选项,例如,想使用MongoDB而不是EF Core,应该重新创建解决方案或手动改变和配置NuGet包。在创建和定制解决方案后,没有自动改变这些选项的方法。
从网站上下载解决方案,可以很直观地设置这些选项。然而,对于喜欢命令行工具的用户来说,还有一种替代方法。
使用 ABP CLI
在 ABP CLI 中使用abp new
命令创建新的解决方案。打开命令行终端,导航到一个空目录下输入如下命令:
abp new ProductManagement
ProductManagement
是解决方案名称,该命令创建一个新的WEB应用程序,采用 EF Core 、 SQL Server LocalDB 、MVC / Razor Pages UI ,这些是默认选项。如果附带上选项参数,等同如下命令:
abp new ProductManagement -t app -u mvc -d ef -dbms SqlServer --mobile none
如果希望设置数据库连接字符串,可以通过设置 --connection-string
选项参数:
abp new ProductManagement -t app -u mvc -d ef -dbms SqlServer --mobile none --connection-string "Server=(LocalDb)\\MSSQLLocalDB;Database=ProductManagement;Trusted_Connection=True"
示例中的数据库连接字符串是默认连接字符串值,使用 LocalDb
。如果你希望修改默认字符串,可以参看本章中 连接字符串 部分。
所有可用的选项和值,可以参看 ABP CLI 文档:https://docs.abp.io/en/abp/latest/CLI 。
关于示例应用程序 在下一章中,我们将创建一个示例应用程序,名为 ProductManagement 。可以把目前正在创建的解决方案作为下一章的起点。
我们现在有了一个架构良好、可用于生产的解决方案。下一节将介绍如何运行这个解决方案。
运行解决方案
我们可以使用 IDE 或 代码编辑器 打开解决方案,创建数据库并运行WEB应用程序。使用 Visual Studio 或你喜欢的IDE打开解决方案 ProductManagement.sln
,将看到下图所示的解决方案结构:
解决方案进行了分层,并包含多个项目。test
目录包含测试项目。大多数项目是类库项目,少数几个是可执行应用程序:
- ProductManagement.Web 是解决方案中主要的WEB应用程序。
- ProductManagement.DbMigrator 用于应用数据库迁移和初始化种子数据。
解决方案中使用数据库,在创建数据库之前,请检查或修改数据库连接字符串。
连接字符串
数据库连接字符串,通常包含服务器地址,数据库名称,和访问凭证。在项目 ProductManagement.Web 和 ProductManagement.DbMigrator 的配置文件 appsettings.json
中进行配置:
"ConnectionStrings": {
"Default": "Server=(LocalDb)\\MSSQLLocalDB;Database=ProductManagement;Trusted_Connection=True"
}
默认连接字符串使用 LocalDb 数据库1,一个轻量级、用于开发目的 SQL Server 兼容数据库。Visual Studio 内置安装,如果你想连接到其他 SQL Server 实例,可以修改连接字符串,确保同时修改两个项目中的连接字符串。
关于 SQL Server LocalDB SQL Server LocalDB 是 SQL Server 超级精简版本,安装只有几十MB大小,不支持联网,只能本机连接,通常用于开发环境。
在下一节中,创建数据库时会用到连接字符串。
创建数据库
解决方案中使用 Entity Framework Core,采用 Code First 数据库迁移。所以,可以使用 Add-Migration
和 Update-Database
命令管理数据库结构更改。
ProductManagement.DbMigrator 是一个控制台应用程序,运行该应用程序可以在开发和生产环境创建和迁移数据库。包含初始化种子数据,默认解决方案中会初始化一个管理员角色和用户。
ProductManagement.DbMigrator 项目右键,选择 Set as Startup Project 命令,设置该项目且为启动项目,然后 Ctrl+F5 使用非调试模式运行项目。
当然,我们也可以打开命令行终端工具,导航到 ProductManagement.DbMigrator 项目所在目录,然后执行 dotnet run
命令,使用非调试模式运行项目。
数据已经创建成功,现在可以运行WEB应用程序,浏览用户界面。
运行WEB应用程序
设置 ProductManagement.Web 项目作为启动项目,然后使用 Ctrl+F5 (非调试模式)运行它。
非调试模式启动 当不需要调试项目时,强烈建议使用非调试模式运行应用,这样会有更快的运行速度。
项目启动成功之后,会打开首页。点击 登陆 按钮,导航到登陆页面:
默认用户名是 admin
,默认密码是 1q2w3E*
。可以在登陆之后修改默认密码。
ABP 是一个模块化框架,解决方案启动模板已经安装必要的基础模块。在进行应用开发之前,应该浏览一下预制模块。
浏览预制模块
本节将浏览解决方案启动模板中预制的基础模块:Account(帐户)、Identity(身份)和Tenant Management(租户管理)。
这些模块的源码并没有包含在解决方案中,而是以 NuGet 包形式引用,当 ABP 新版本发布之后,升级非常方便。模块被设计为无需修改代码。当然,如果有特殊的需求,可以直接在解决方案中包含模块源码并进行修改。
让我们开始看看 Account 模块,该模块提供用户认证功能。
Account 模块
登陆页来自 Account 模块。该模块实现登陆、注册、找回密码、社交登陆,和帐户管理基本功能。当启用多租户功能时,还提供租户切换功能。多租户会在 第15章 实现多租户 章节详细介绍。
登陆之后,可以看到 管理员 菜单选项,包含多个子菜单选项。这些菜单来自 ABP 预制的 Identity 和 Tenant Management 模块。
Identity 模块
Identity 模块用于管理用户、角色和他们在应用程序中的权限。在 Administration(管理员) 菜单下添加了 Identity management(身份管理) 菜单项,包含 Roles(角色) 和 Users(用户) 子菜单项:
点击 Roles(角色) 菜单项,打开角色管理页:
在该页面中,可以管理角色和它在应用程序中对应的权限。在 ABP 中,角色是一组特权。为用户设置权限,相当于给用户设置角色中提供的一组特权。上图所示,默认角色被标记为Default,默认角色会自动设置给新注册的用户。第7章 探索横切关注点章节还会详细介绍权限和授权系统。
Users(用户) 页面,用于在应用程序中管理用户,一个用户可以拥有零个或多个角色。
角色 和 用户 是几乎所有应用程序中基础功能,租户管理只在多租户系统中使用。
Tenant Management 模块
租户管理模块用于在多租户系统中创建和管理你的租户。在多租户应用中,一个租户对应一个客户,该客户拥有自己独立的数据,包括角色、用户和授权,独立于其他租户。这是构建 SaaS(软件即服务) 解决方案,有效且通用的方式。如果你的应用并不是多租户系统,只需要从解决方案中移除该模块。
租户管理会在 第16章 实现多租户 章节详细介绍。
小结
在本章中,我们安装了开发环境所必须的工具。然后,我们看到如何使用直接下载的方式或CLI方式创建新的解决方案。最后,配置并启动应用程序,浏览解决方案中预制功能。
在下一章中,我们将学习如何在解决方案中添加自己的功能,以更好地理解解决方案结构。