From 1402b3edf4dc0e44847624cbd03a562f7f89017a Mon Sep 17 00:00:00 2001 From: liangshiwei Date: Wed, 12 Jun 2019 18:08:26 +0800 Subject: [PATCH 1/5] Update MVC Application startup template document --- docs/zh-Hans/Startup-Templates/Mvc.md | 31 +++++++++++++-------------- 1 file changed, 15 insertions(+), 16 deletions(-) diff --git a/docs/zh-Hans/Startup-Templates/Mvc.md b/docs/zh-Hans/Startup-Templates/Mvc.md index 48bdcd30a2..f637a659d9 100644 --- a/docs/zh-Hans/Startup-Templates/Mvc.md +++ b/docs/zh-Hans/Startup-Templates/Mvc.md @@ -87,12 +87,16 @@ abp new Acme.BookStore --tiered 项目主要包含 [应用服务](../Application-Services.md) **interfaces** 和应用层的 [数据传输对象](../Data-Transfer-Objects.md) (DTO). 它用于分离应用层的接口和实现. 这种方式可以将接口项目做为约定包共享给客户端. +例如 `IBookAppService` 接口和 `BookCreationDto` 类都适合放在这个项目中. + * 它依赖 `.Domain.Shared` 因为它可能会在应用接口和DTO中使用常量,枚举和其他的共享对象. #### .Application 项目 项目包含 `.Application.Contracts` 项目的 [应用服务](../Application-Services.md) 接口**实现**. +例如 `BookAppService` 类适合放在这个项目中. + * 它依赖 `.Application.Contracts` 项目, 因为它需要实现接口与使用DTO. * 它依赖 `.Domain` 项目,因为它需要使用领域对象(实体,仓储接口等)执行应用程序逻辑. @@ -181,9 +185,9 @@ ABP有[动态 C# API 客户端](../AspNetCore/Dynamic-CSharp-API-Clients.md)功 此外, `.HttpApi.Client.ConsoleTestApp` 是一个控制台应用程序(不是自动化测试项目),它用于演示DotNet应用程序中HTTP API的用法. -测试项目已为集成测试做好准备: +测试项目是用于做集成测试的: -* 它完成集成到ABP框架和应用程序的所有服务. +* 它完全集成到ABP框架和应用程序的所有服务. * 如果数据库提供程序是EF Core,测试项目会使用SQLite内存数据库,如果是MongoDB,它使用[Mongo2Go](https://github.com/Mongo2Go/Mongo2Go)库. * 授权被禁用,任何的应用服务都可以在测试中轻松调用. @@ -199,7 +203,7 @@ ABP有[动态 C# API 客户端](../AspNetCore/Dynamic-CSharp-API-Clients.md)功 如果你按上面的描述指定了 `--tiered` 选项,会创建分层解决方案. 分层结构的目的是**将Web应用程序和HTTP API部署到不同的服务器**: -![bookstore-visual-studio-solution-v3](../images/tiered-solution-servers.png) +![tiered-solution-servers](../images/tiered-solution-servers.png) * 浏览器渲染HTML,执行CSS和JavaScript来运行UI. * Web服务器托管静态文件(CSS,JavaScript,图片...等)和动态组件(如Razor页面),它通过HTTP请求到API服务器执行应用程序的业务逻辑. @@ -212,15 +216,15 @@ ABP有[动态 C# API 客户端](../AspNetCore/Dynamic-CSharp-API-Clients.md)功 解决方案结构如下所示: -![bookstore-visual-studio-solution-v3](../images/bookstore-visual-studio-solution-tiered.png) +![bookstore-visual-studio-solution-tiered](../images/bookstore-visual-studio-solution-tiered.png) 与默认结构不同,我们得到了两个新项目: `.IdentityServer` 和 `.HttpApi.Host`. #### .IdentityServer 项目 -用于其他项目的身份验证服务器. `.Web`项目使用OpenId Connect身份验证获取当前用户的身份和访问令牌. 然后使用访问令牌调用HTTP API服务器. HTTP API服务器使用bearer token从访问令牌获取声明授权当前用户. +用于其他项目的身份验证服务器. `.Web`项目使用OpenId Connect身份验证从IdentityServer获取当前用户的身份和访问令牌. 然后使用访问令牌调用HTTP API服务器. HTTP API服务器使用bearer token从访问令牌获取声明授权当前用户. -![bookstore-visual-studio-solution-v3](../images/tiered-solution-applications.png) +![tiered-solution-applications](../images/tiered-solution-applications.png) ABP使用开源的[IdentityServer4](https://identityserver.io/)框架做应用程序间的身份验证. 有关IdentityServer4和OpenId Connect协议的详细信息请参阅[IdentityServer4文档](http://docs.identityserver.io). @@ -228,9 +232,7 @@ ABP使用开源的[IdentityServer4](https://identityserver.io/)框架做应用 #### .HttpApi.Host 项目 -该项目是一个承载解决方案API的应用程序. - -它有自己的`appsettings.json`文件(数据库连接字符串等其他配置). +该项目是一个承载解决方案API的应用程序. 它有自己的`appsettings.json`文件(数据库连接字符串等其他配置). #### .Web 项目 @@ -247,13 +249,10 @@ ABP使用开源的[IdentityServer4](https://identityserver.io/)框架做应用 你应该按照以下顺序运行应用: * 首先运行`.IdentityServer`,因为其他应用程序依赖它做身份验证. -* 然后运行`.HttpApi.Server`,因为`.Web`应用程序需要访问HTTI API. +* 然后运行`.HttpApi.Host`,因为`.Web`应用程序需要访问HTTI API. * 最后运行`.Web`并登录到应用程序(用户名: `admin` 密码: `1q2w3E*`). -### 其他数据库提供程序 +## 下一步是什么? -TODO - -#### MongoDB - -TODO \ No newline at end of file +* 参阅[ASP.NET Core MVC 模板入门](../Getting-Started-AspNetCore-MVC-Template.md)创建此模板的新解决方案并运行它. +* 参阅[ASP.NET Core MVC 教程](../Tutorials/AspNetCore-Mvc/Part-I.md)学习使用此模板开发应用程序. \ No newline at end of file From 42e1a7abcd1fef0ca68fe07c9b0ad57d93a872ca Mon Sep 17 00:00:00 2001 From: Yuhang Ji Date: Tue, 18 Jun 2019 20:49:17 +0800 Subject: [PATCH 2/5] Translate Post.md --- .../2019-06-19 v0_18_Release/Post.md | 88 +++++++++++++++++++ 1 file changed, 88 insertions(+) create mode 100644 docs/zh-Hans/Blog-Posts/2019-06-19 v0_18_Release/Post.md diff --git a/docs/zh-Hans/Blog-Posts/2019-06-19 v0_18_Release/Post.md b/docs/zh-Hans/Blog-Posts/2019-06-19 v0_18_Release/Post.md new file mode 100644 index 0000000000..875abb042a --- /dev/null +++ b/docs/zh-Hans/Blog-Posts/2019-06-19 v0_18_Release/Post.md @@ -0,0 +1,88 @@ +# ABP CLI,v0.18版本的新模板和其他功能 + +ABP v0.18已发布, 包含解决的[70+个issue](https://github.com/abpframework/abp/milestone/16?closed=1),[500+次提交](https://github.com/abpframework/abp/compare/0.17.0.0...0.18.0) + +## 网站更改 + +[abp.io](https://abp.io)网站**完全更新**以突出ABP框架的目标和重要功能.文档和博客网址也会更改: + +- `abp.io/documents`移至[docs.abp.io](https://docs.abp.io). +- `abp.io/blog`转移到[blog.abp.io](https://blog.abp.io). + +## ABP CLI + +ABP CLI(命令行界面)是一种新的全局命令行工具,用于执行基于ABP的解决方案的一些常见操作.主要功能是; + +* **创建新的应用程序**或模块项目. +* **向应用程序添加新模块**. +* **更新**解决方案中所有与ABP相关的包. + +ABP CLI现在是创建新项目的首选方式,您仍然可以从[开始](https://abp.io/get-started)页面下载新项目. + +### 用法 + +使用命令行窗口安装ABP CLI: + +```` bash +dotnet tool install -g Volo.Abp.Cli +```` + +创建一个新应用程序: + +```` bash +abp new Acme.BookStore +```` + +将模块添加到应用程序: + +```` bash +abp add-module Volo.Blogging +```` + +更新解决方案中所有与ABP相关的包: + +```` bash +abp update +```` + +有关详细信息,请参阅[ABP CLI文档](https://docs.abp.io/en/abp/latest/CLI). + +## 新模板 + +在此版本中,我们更新了所有启动模板.主要目标是提供基于领域驱动设计层的更好的启动模板,这些模板还允许创建分层解决方案(Web和API层可以在物理上分开).它还包括针对不同层分开的单元和集成测试项目. + +下图显示了MVC应用程序的新启动项目. + +![mvc-template-solution](mvc-template-solution.png) + +有关详细信息,请参阅[启动模板文档](https://docs.abp.io/en/abp/latest/Startup-Templates/Index). + +## 更改日志 + +以下是此版本附带的一些其他功能和增强功能: + +* 具有`IDataSeeder`服务和`IDataSeedContributor`接口的新数据种子系统,允许模块化初始数据种子系统. +* 新[Volo.Abp.Specifications](https://www.nuget.org/packages/Volo.Abp.Specifications)包. +* 改进了MemoryDB实现,以序列化/反序列化存储在内存中的对象,因此它为单元/集成测试中的数据库模拟提供了更真实的基础结构. +* 为docs模块添加了多语言支持.用于[ABP文档](https://docs.abp.io). + +有关此版本中的所有功能,增强功能和错误修正,请参阅[GitHub发行说明](https://github.com/abpframework/abp/releases/tag/0.18.0). + +## 路线图 + +与ABP v1.0版本相关的一件事是.NET Core / ASP.NET Core 3.0版本.根据[.NET核心路线图](https://github.com/dotnet/core/blob/master/roadmap.md),计划于2019年9月发布3.0版本. + +ASP.NET Core具有很大的变化和功能.作为一个重大的突破性变化,它将[仅在.NET Core上运行](https://github.com/aspnet/Announcements/issues/324)(删除.net标准支持),因此它不能用于完整.net框架了. + +我们已宣布在2019年第二季度发布v1.0.我们应该为v1.0做的主要工作是: + +* 填补当前功能的空白. +* 重构和改进当前的API. +* 修复已知的错误. +* 完成文档和教程. + +除了我们应该做的工作之外,我们还在考虑等待ASP.NET Core 3.0发布.因为,如果我们在ASP.NET Core 3.0之前发布ABP v1.0,我们将不得不在短时间内再次发布ABP v2.0并放弃v1.0支持.因此,我们正在考虑使用ASP.NET Core 3.0 RC发布ABP v1.0 RC,并将最终发布日期与Microsoft保持一致. + +## 想要贡献? + +感谢社区对ABP开发的支持.非常感谢.如果您还想参与,请参阅[本指南](https://github.com/abpframework/abp/blob/master/docs/en/Contribution/Index.md)作为开始. From 947af22695e571e002a8a5170e63b78256593722 Mon Sep 17 00:00:00 2001 From: Yuhang Ji Date: Tue, 18 Jun 2019 20:52:04 +0800 Subject: [PATCH 3/5] Add files via upload --- .../mvc-template-solution.png | Bin 0 -> 12919 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 docs/zh-Hans/Blog-Posts/2019-06-19 v0_18_Release/mvc-template-solution.png diff --git a/docs/zh-Hans/Blog-Posts/2019-06-19 v0_18_Release/mvc-template-solution.png b/docs/zh-Hans/Blog-Posts/2019-06-19 v0_18_Release/mvc-template-solution.png new file mode 100644 index 0000000000000000000000000000000000000000..307e3516a5414173016efaedd22e53983fa25f1c GIT binary patch literal 12919 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 literal 0 HcmV?d00001 From 5c499b8a1cdd8ba29673b78b0e9583e459c756d2 Mon Sep 17 00:00:00 2001 From: maliming Date: Wed, 19 Jun 2019 09:13:00 +0800 Subject: [PATCH 4/5] Update Post.md --- docs/zh-Hans/Blog-Posts/2019-06-19 v0_18_Release/Post.md | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/docs/zh-Hans/Blog-Posts/2019-06-19 v0_18_Release/Post.md b/docs/zh-Hans/Blog-Posts/2019-06-19 v0_18_Release/Post.md index 875abb042a..e7f5951f43 100644 --- a/docs/zh-Hans/Blog-Posts/2019-06-19 v0_18_Release/Post.md +++ b/docs/zh-Hans/Blog-Posts/2019-06-19 v0_18_Release/Post.md @@ -17,7 +17,7 @@ ABP CLI(命令行界面)是一种新的全局命令行工具,用于执行基于A * **向应用程序添加新模块**. * **更新**解决方案中所有与ABP相关的包. -ABP CLI现在是创建新项目的首选方式,您仍然可以从[开始](https://abp.io/get-started)页面下载新项目. +ABP CLI现在是创建新项目的首选方式,你仍然可以从[开始](https://abp.io/get-started)页面下载新项目. ### 用法 @@ -61,8 +61,9 @@ abp update 以下是此版本附带的一些其他功能和增强功能: -* 具有`IDataSeeder`服务和`IDataSeedContributor`接口的新数据种子系统,允许模块化初始数据种子系统. +* 新[Volo.Abp.Dapper](https://www.nuget.org/packages/Volo.Abp.Dapper)包. * 新[Volo.Abp.Specifications](https://www.nuget.org/packages/Volo.Abp.Specifications)包. +* 具有`IDataSeeder`服务和`IDataSeedContributor`接口的新数据种子系统,允许模块化初始数据种子系统. * 改进了MemoryDB实现,以序列化/反序列化存储在内存中的对象,因此它为单元/集成测试中的数据库模拟提供了更真实的基础结构. * 为docs模块添加了多语言支持.用于[ABP文档](https://docs.abp.io). @@ -85,4 +86,4 @@ ASP.NET Core具有很大的变化和功能.作为一个重大的突破性变化, ## 想要贡献? -感谢社区对ABP开发的支持.非常感谢.如果您还想参与,请参阅[本指南](https://github.com/abpframework/abp/blob/master/docs/en/Contribution/Index.md)作为开始. +感谢社区对ABP开发的支持.非常感谢.如果你还想参与,请参阅[本指南](https://github.com/abpframework/abp/blob/master/docs/en/Contribution/Index.md)作为开始. From 92cb9b38e2dbf0c13ac4ae26c5f8b01b2ec1e7a4 Mon Sep 17 00:00:00 2001 From: liangshiwei Date: Wed, 19 Jun 2019 13:44:52 +0800 Subject: [PATCH 5/5] Translate mvc module startup template document --- docs/en/Startup-Templates/Mvc-Module.md | 4 +- docs/zh-Hans/Startup-Templates/Mvc-Module.md | 156 +++++++++++++++++- docs/zh-Hans/Startup-Templates/Mvc.md | 4 +- .../issuemanagement-module-solution.png | Bin 0 -> 25772 bytes .../layered-project-dependencies-module.png | Bin 0 -> 38795 bytes 5 files changed, 157 insertions(+), 7 deletions(-) create mode 100644 docs/zh-Hans/images/issuemanagement-module-solution.png create mode 100644 docs/zh-Hans/images/layered-project-dependencies-module.png diff --git a/docs/en/Startup-Templates/Mvc-Module.md b/docs/en/Startup-Templates/Mvc-Module.md index 96c91b4c4b..bcb1542575 100644 --- a/docs/en/Startup-Templates/Mvc-Module.md +++ b/docs/en/Startup-Templates/Mvc-Module.md @@ -102,7 +102,7 @@ The solution has multiple test projects, one for each layer: - `.Domain.Tests` is used to test the domain layer. - `.Application.Tests` is used to test the application layer. - `.EntityFrameworkCore.Tests` is used to test EF Core configuration and custom repositories. -- `.MongoDB.Tests` is used to test EF Core configuration and custom repositories. +- `.MongoDB.Tests` is used to test MongoDB configuration and custom repositories. - `.TestBase` is a base (shared) project for all tests. In addition, `.HttpApi.Client.ConsoleTestApp` is a console application (not an automated test project) which demonstrate the usage of HTTP APIs from a Dotnet application. @@ -121,8 +121,6 @@ You can still create unit tests for your classes which will be harder to write ( The solution has a few host applications to run your module on development. Host applications are used to run your module in a fully configured application. It is useful on development. Host applications includes some other modules in addition to the module being developed: -* - Host applications support two types of scenarios. #### Single (Unified) Application Scenario diff --git a/docs/zh-Hans/Startup-Templates/Mvc-Module.md b/docs/zh-Hans/Startup-Templates/Mvc-Module.md index 9f19f83278..6fa89615a6 100644 --- a/docs/zh-Hans/Startup-Templates/Mvc-Module.md +++ b/docs/zh-Hans/Startup-Templates/Mvc-Module.md @@ -1,6 +1,158 @@ -# MVC Module 启动模板 +# MVC模块启动模板 -TODO +可用此模板开发基于[模块开发最佳实践和约定](../Best-Practices/Index.md)的可**复用 [应用程序模块](../Modules/Index.md)** . 它同样适用于开发**微服务**. +## 如何开始? +你可以使用[ABP CLI](../CLI.md)创建基于此启动模板的新项目,或者你也可以在[入门](https://abp.io/get-started)页面创建并下载项目. 在这里我们使用CLI创建新项目. +如果未安装ABP CLI,第一步是安装ABP CLI + +````bash +dotnet tool install -g Volo.Abp.Cli +```` + +然后使用 `abp new` 命令在空文件夹中创建新解决方案: + +````bash +abp new Acme.IssueManagement -t mvc-module +```` + +* `Acme.IssueManagement` 是解决方案的名称, 如*YourCompany.YourProduct*. 你可以使用单级或多级名称. + +### 无用户界面 + +默认情况模板附带一个UI,你可以使用`--no-ui`选项指定不包含UI层. + +````bash +abp new Acme.IssueManagement -t mvc-module --no-ui +```` + +## 解决方案结构 + +根据命令的选项,会创建略有不同的解决方案结构. 如果未指定选项,你会得到如下所示的解决方案: + +![issuemanagement-module-solution](../images/issuemanagement-module-solution.png) + +项目组织在`src`和`test`和`host`文件夹中: + +* `src` 文件夹包含基于[DDD](../Domain-Driven-Design.md)原则分层的实际模块. +* `test` 文件夹包含单元和集成测试. +* `host` 文件夹包含具有不同配置的应用程序,用于演示在应用程序中如何托管模块. 这些不是模块的一部分,但开发时会很有用. + +下图展示了模块的层和项目的依赖关系: + +![layered-project-dependencies-module](../images/layered-project-dependencies-module.png) + +下面介绍解决方案中的项目及依赖关系: + +### .Domain.Shared 项目 + +项目包含常量,枚举和其他对象,这些对象实际上是领域层的一部分,但是解决方案中所有的层/项目中都会使用到. + +例如 `IssueType` 枚举和 `IssueConts` 类 (可能是 `Issue` 实体用到的常数字段,像`MaxTitleLength`)都适合放在这个项目中. + +* 该项目不依赖解决方案中的其他项目. 其他项目直接或间接依赖该项目. + +### .Domain 项目 + +解决方案的领域层. 它主要包含 [实体, 集合根](../Entities.md), [领域服务](../Domain-Services.md), [值类型](../Value-Types.md), [仓储接口](../Repositories.md) 和解决方案的其他领域对象. + +例如 `Issue` 实体, `IssueManager` 领域服务和 `IIssueRepository` 接口都适合放在这个项目中. + +* 它依赖 `.Domain.Shared` 项目,因为项目中会用到它的一些常量,枚举和定义其他对象. + +### .Application.Contracts 项目 + +项目主要包含 [应用服务](../Application-Services.md) **interfaces** 和应用层的 [数据传输对象](../Data-Transfer-Objects.md) (DTO). 它用于分离应用层的接口和实现. 这种方式可以将接口项目做为约定包共享给客户端. + +例如 `IIssueAppService` 接口和 `IssueCreationDto` 类都适合放在这个项目中. + +* 它依赖 `.Domain.Shared` 因为它可能会在应用接口和DTO中使用常量,枚举和其他的共享对象. + +### .Application 项目 + +项目包含 `.Application.Contracts` 项目的 [应用服务](../Application-Services.md) 接口**实现**. + +例如 `IssueAppService` 类适合放在这个项目中. + +* 它依赖 `.Application.Contracts` 项目, 因为它需要实现接口与使用DTO. +* 它依赖 `.Domain` 项目,因为它需要使用领域对象(实体,仓储接口等)执行应用程序逻辑. + +### .EntityFrameworkCore 项目 + +这是集成EF Core的项目. 它定义了 `DbContext` 并实现 `.Domain` 项目中定义的仓储接口. + +* 它依赖 `.Domain` 项目,因为它需要引用实体和仓储接口. + +> 如果不需要使用EF Core,可以删除此项目. + +### .MongoDB 项目 + +这是集成MongoDB的项目. + +* 它依赖 `.Domain` 项目,因为它需要引用实体和仓储接口. + +> 如果不需要使用MongoDB,可以删除此项目. + +#### Test 项目 + +解决方案有多个测试项目,每一层都会有一个: + +* `.Domain.Tests` 用于测试领域层. +* `.Application.Tests` 用于测试应用层. +* `.EntityFrameworkCore.Tests` 用于测试EF Core配置与自定义仓储. +* `.MongoDB.Tests` 用于测试MongoDB配置与自定义仓储. +* `.TestBase` 所有测试项目的基础(共享)项目. + +此外, `.HttpApi.Client.ConsoleTestApp` 是一个控制台应用程序(不是自动化测试项目),它用于演示DotNet应用程序中HTTP API的用法. + +测试项目是用于做集成测试的: + +* 它完全集成到ABP框架和应用程序的所有服务. +* 如果数据库提供程序是EF Core,测试项目会使用SQLite内存数据库,如果是MongoDB,它使用[Mongo2Go](https://github.com/Mongo2Go/Mongo2Go)库. +* 授权被禁用,任何的应用服务都可以在测试中轻松调用. + +你依然可以编写单元测试,只不过它很难写(因为你需要准备mock/fake对象),但它的运行速度更快(因为只测试单个类并跳过所有初始化过程). + +> 领域层和应用层测试使用EF Core. 如果你删除了EF Core集成项目或者要使用MongoDB测试这些层,需要手动的修改项目引用和依赖. + +### Host 项目 + +解决方案中有一些宿主应用程序可以在开发时运行模块. 在开发时会很有用. 除了正在开发的模块外,宿主应用程序包括其他模块: + +宿主应用程序支持两种类型的场景. + +#### 单体 (统一) 应用场景 + +如果模块含有UI, 那么 `.Web.Unified` 应用程序于在一个站点上托管UI和API. 它有自己的 `appsettings.json` 配置文件(包括数据库连接字符串)和EF Core数据库迁移. + +`.Web.Unified` 应用程序有一个名为`YourProjectName_Unified`的数据库(本例中名为 *IssueManagement_Unified*). + +> 如果你选择了 `--no-ui` 选项, 这个项目不会出现在你的解决方案中. + +##### 如何运行? + +将其设置成启动项, 使用包管理控制台运行 `Update-Database` 命令迁移数据库,然后运行应用程序. 默认用户名: `admin` 密码: `1q2w3E*`. + +#### 分离部署&数据库 场景 + +在这个场景中,有三个应用程序; + +* `.IdentityServer` 应用程序是其他应用程序使用的身份验证服务器,它有自己的 `appsettings.json` 包含数据库连接字符串和其他配置. +* `.HttpApi.Host` 托管模块的HTTP API. 它有自己的 `appsettings.json` 包含数据库连接字符串和其他配置. +* `.Web.Host` 托管模块的UI. 它包含 `appsettings.json` 文件, 但是其中没有数据库连接字符串, 因为它不需要连接到数据库, 它主要调用远程API服务器和身份认证服务器. + +下图展示了应用程序的关系: + +![tiered-solution-applications](../images/tiered-solution-applications.png) + +`.Web.Host` 项目使用OpenId Connect身份认证从`.IdentityServer`获取当前用户的身份和访问令牌. 然后使用访问令牌调用 `.HttpApi.Host`. HTTP API 服务器使用bearer token验证访问令牌获取当前用户声明并授权用户. + +##### 如何运行? + +你需要按照以下顺序运行应用程序: + +- 首先, 运行 `.IdentityServer`,因为其他应用程序依赖它做身份认证. +- 然后运行 `.HttpApi.Host`,因为`.Web.Host`应用程序使用API接口. +- 最后运行 `.Web.Host` 使用用户名: `admin` 密码: `1q2w3E*` 登录到应用程序. \ No newline at end of file diff --git a/docs/zh-Hans/Startup-Templates/Mvc.md b/docs/zh-Hans/Startup-Templates/Mvc.md index f637a659d9..8868d173ff 100644 --- a/docs/zh-Hans/Startup-Templates/Mvc.md +++ b/docs/zh-Hans/Startup-Templates/Mvc.md @@ -11,7 +11,7 @@ MVC应用程序启动模板是基于[领域驱动设计](../Domain-Driven-Design ## 如何开始 -你要以使用[ABP CLI](../CLI.md)创建基于此启动模板的新项目,或者你也可以在[入门](https://abp.io/get-started)页面创建并下载项目. 在这里我们使用CLI创建新项目. +你可以使用[ABP CLI](../CLI.md)创建基于此启动模板的新项目,或者你也可以在[入门](https://abp.io/get-started)页面创建并下载项目. 在这里我们使用CLI创建新项目. 如果未安装ABP CLI,第一步是安装ABP CLI @@ -173,7 +173,7 @@ ABP有[动态 C# API 客户端](../AspNetCore/Dynamic-CSharp-API-Clients.md)功 > > 你可以在表示层中使用领域实体和仓储,但是根据DDD的理论,这被认为是一种不好的做法. -#### 测试项目 +#### Test 项目 解决方案有多个测试项目,每一层都会有一个: diff --git a/docs/zh-Hans/images/issuemanagement-module-solution.png b/docs/zh-Hans/images/issuemanagement-module-solution.png new file mode 100644 index 0000000000000000000000000000000000000000..181924dd90059a8ccc8fc94dbae57a5800244142 GIT binary patch literal 25772 zcmbrmby!qy+b%qkiiEU;pv2JKElRg2T~g8@-5?;{-Cfes0s}}l2-3{}Lo;+p?FIgx zV?X;j-tYbPvEM&f2Q#zgUUyu5p4S8`DM(_V5u<@XAPi|KF=Y_w(Etd9!1Wjbc!&F$ z#2N_n5+p4q`oSe_x7oshWXctO1Im+HFrKNR2=;v?TaXjHI&Js!TV>C8seG_~oWh%Y zT_H9ZaZAmC+EudU3)=mdw|TE{8-tq=Y9ba5>0D)-jh3lYdLvGOJ2d==7YzoeQ| z;~S0UAcsp`zFB}%J%*5@BtBy0c&;6Q)OKgH<;R=YoH1|A9^q4+I)i2b+;4*k2*~T!`=# z8ea*c#=7H|?~0oQ+MZm#H#8#kynUT1RR0Cd&)&lPn{PkXNq;Td#-vk3zwe-ZI+ZIL zZ=y0>-f0)oh`PFofwcCg%$mzQ&n2?}@3|yAY)g|34>h9#Qnj(*tZ2r#zTc!K^keJ>p5tQsK%Bo>P0Y)rQu#0e^{+o< zQDbX^ZS%=+R;ND^d@VvVWtZCHrcdQ7>M%IRVT%Y*3hlzCqJYl()Cu=|tY(lB3(K7{ zJF8Kj7d0UDToBrS6)Kb{+&e8`wPsdipC6c`6`s;}_d9PEB07~oAZY{r{0Sk%a9TEz zIsNxwzHB0%#Yf^Ya9g#2YYU{@GQFvDxo)oa{0*T^l@&`#g`Vg$xjLHnSixphDFw7? zF}}7nDXZz+n^iP!rOx$|tQsUl6cpA?L!HjSCBEh9WIhWCtB!=&{tEpb&mGEaL!LCA z1&q1t@Wpm8wsnf}5{JXI-+rbQ1KXEf_g|>Q^zS~}NYEW*KWq6Cid$ij#+Ym=bok;o zm;g_PpaP9ZGV_Pb89U#md3kIY`VSPm z{g#sScq7B)e(pPQ$!f-=%|dlbP5HwHMb+wcZi7~{8>WymepvxU-@-2CMAz&*UG|-8 z?!D4#_3c^L*fNeeBLcM%w3geK?>@J(aFOSak3oaIF?)^XzzIuGZ1qBsU(y0ytVok| zmtRiRJ(-{_d#|)2kJ1PY;r1y)Owa`3OX~h_s+`ks-04Z9r=KxOm*+%i7n=KaErNL{ zXWXi|a>vfn=HQ&}2Ko-k>2+&T8r1CwTI?KePOW3n&B8SvWAv9piPh0Ckb}QXTFT6r zvQqIhB<`D+jTf@F4esybOVu2(nO`HPK(m4SBK%il&^hwjZ{ zW;&U+CudXvX>Sbj%BREF=Qv7+icE}HsiOGYzarNeVbbs;U%q18I1|ulS%4~;9i2e5 z)oDfwB`9Ppik6jvO4;Wu{;s<<@3nsfF)3Q|wneC2Q`1`X$oIOyyWN#pNws;^<1vyY z3JSL7+wJpK1ChhtoQBY1`r_l#p`GvOvsax|@y@-mkAW#g_a)3Wv%_0A#1j-FzGjs) z40lamxm`ah{GkSmxn?-pKdU(t>}xnHt&A}-nGHx2_|=UD9kMv&u5|l`HaC@`Vv}iR zgC^uOLgm74WG*EQ+8XKTWKE{lGUn?gO}-{piL%g_U;XSK(O;^X=1(WEX7Xe|&3mJP zfxNV&!MO)k5xRAHcXOFRj(SFr-QIa}{ZUG)sZ(Dyb-gu)+H~u~WjrGyFwG|!WeL+_ zDwc0poeX)Z3HH`1ZGJ6S&TL~(uQB-!Qa`~d%gd**^_scK3-`D&lkY6$#$6)wJ_^t< z9LC8TJ0sGkQZ#%uq<*pAFZFbNexXiD@{eWF`7@RU`aSMAWtZ7TgIg{f?EJ+$=(ffT zF;{oNc>AoDaCPoviad1i2>rEi2Qhkpny1L0(d>OkuJiJehI7fl#yii=jj8T(*n31n zxNL(3Bpkm<{MSNPD%CmlbIHPRL3eikL0~!uKV@ zr!-{*-TS|Un-Yk!=Z2$PDg;*>5QeFnZ=UfJ#cAY>%gEs8ORR1~HMrRp(j>0mcLLr< zGeFL64)y#BsZU;fI9@P3h2jIab)kBw&kglr4II`SFYh|9)TnZuh4)9@OQ$l5SbVx} zjY)!rq1U>AjXR$}b?Yv;E_UmiSTPUI09KbC=^(qR=lBOL{Zgu&$Q1Ldr4|kS!9C|1 zHs80e>X@FHhTf$^)DLENP+l|(J!*{&3PKuDZP zIhLJ|wwBIjWrh*z7e3(#Zgn&+du4vC=K8#L>bB>&b|zq0`#6K3{;d7|IdxmLitVfs ztI_@;YT6;v3(j zTTuTeV#D|5`j@vXR*MVCFXDrK?A0kH8V8{3_bF*Laocb4)L$>?IG1MVsNBHdE);H? z!e>KmdeAey%K$?ebU2Y9Iabj7&)^ zm9{+4yK~$f%O4oiVb)W<)gS~Z^Crfw&+X;k5FPW+l3YLHk?*0>qAiO2g;)Ji(k9Zi zBEM77^Ide`cU;_P@7s|(_-@w<&s)UAay=>vwh>M8Z!|fwQ!F|V+m&Vu6OoH$#4X*+ z>-ndH&w1?-?!}VGW&BQkIhn_Xo@51tJmWdfbM#nzDiBCc7LUUcd|V8Z%pE0Joyz^XLJtBN z(F9I?+PJJC0HVPUAKxJTM}(Pljh?#x1W7O(2tY}|D$hv5B`{ECd!MT@6_s)p6pnrF zJP0+MQqW^n5Q{c`1X}-TWHj9wiJddrn|_?@4cUrK9DcfTcvv%(z>;C#+R&H_@4vK& zmJR|U@)L<3bPLv~Bu(5_dDiFjDLci1l3z2gkGkVYw#*!w`L4SZM|f0wF+bjiiwz8O zPYWM`vf_F(^m(kzpT7`tKG_`A4$VjkN`hy#UgtI?FzcAHcE>$_y763Zlb_$iiz4Q* z#GiqOJrSQI9Bcy2A4P+Gw?G~vJw07f$aoFu$Ea7vYhRr_jj#LM|mg2Gi|B)mUQ z4Y*Zg{NYxXmW!Oxq`PC3<4?c4NLH|f(e)tA$+*3D5(KN8J9WuHQU^7b(vV~dadc|W zEt6|50_Yh{eJBgLzB>Z9vMUcQ2!!{fYnQHI3Ze(6SX^L#CY~eqF6Y~;OBTJg(@_}- zD0=L7iC7Ncwx^fqsZtfLCh9_q5Na9|RURCR54wn;FU-AzICvSl;&sBxH=BjRN`t9qV`3uUAL7*-Q>W&aa%;(|V2HLBVie9FI zceeu3!6$kIQf$w|Pj_hun7E12U4?X`CZtMp?w^z{olFfJ1kKgQ$za^eZ_XXq{0=AA zRVl%)_7haK)g>hvOCDD|-fqm1^t7A%P^)3GslKFmF-{ztQylCKyI4v#ktn%Fussv@ zCqQ&!U&{mxt(qXyi{*|Ywm!A-I{7otH?i#pjW3v0EQJUXsFLi_XPZ(D$9;_De%P{L zQbzX6m1)SAn{h-H6^#N-7LSA5?0SU-8*Yaa9U*6YI5m* zx9~wq!Y^|lfxhUz>_GT$u6TE5Why1A>HLnxwBi$%+T1pW^Jz{EPAh*7R?b6|1%Q*5 zI^@`$YN=bTozfL>`J8o-BmAd#R=l32(e5y$dyjCwZh7odw)Z>e3r_Y0QC&_>Rdu!f z#&Ehn&5XuGbwEVA@XUF6_udreQu82$YECsQw_;8rqmOgg&bl?$!D9*?2uEh{oHgv^ zv%=F|D;o5H$QsscCOOn_QJx&ran|$UbKK`n`50H-v*)5k*#m;5FCPPHk;=`5 zr#pU8c9=?NV}8w3zCL9rmm81NW@JTQPuSg0`ZxWe3;q-X*iGT4eG}ytg6`1`XXQX@ zSWt-tRvB}>Ffy7%BD(wX&(?;8eFJI@Y(F2>GIlLStVMTtV}CyyMdSIRV?B$mwuZ)G z!-%JuO<y&z7(5 z2+s9Ij|iPXOuCB3<@K>ZhUZx_28nR3>+uEwlXi`HyzB1*`ABtg-PYUN?(S}tl0k{w zgsFl10DlL|%~{qznC-cw&C6xNyWkeh;XSzh=Lq4xH{FYbbKovH%9(nePz4|R`*i86 zz3fx{UC)?CJcgsa)5n&6oZx+F64yqLF-&Q_NN5S#Ienqp5IXLdf0AxT3G=v@dtqzgBMg=eNN810ZC@+bd|kHRdSc?a?&(H(>>Vv($* zLVUhn$Y|%?q^~h=w{Ze(uIA{+R>hB6v93`TACZ^5iqd_}*snC9v-VY|Qb+y}IvsuY z;XUURp-R@qK?Nh22#rpx!cKkpJy&?JVVULx(us!T!Rs_!jAGA zrvRl#yj@UxP|e1~}Z`n8>Gu@uflmPKfO*W0@N*Dr-eU}G6#Vrz4_ zdimpz>4z|72wyDeUd-E%c&jyCWzW&OB>QQJ5$%5;8Y+@PT z?_L87*qc1u#dk%$sG9_L+79~!S4 zY-&JZx85J$L*~9q*m@vNQAu@mG_Z6BB}`RJwzjZmw&xmSzo%hHJu+N_!RMS6 zjxWeW;2agitCpoA^ud46VyIZHa5nW#{Fjdz0^-{~h*>Ja8? zB&|A2I#oCP%QmcA+rAiq*}2xsnGtU5xw_M{u24yd;oE@`-Mfj32*}OZp_=Xt2fLjr ze|x+iP?td(ne43Qf_}~Fo9&HC!`BvY-A&zku2vaA!=925(s^lo4%9zR3q8k^fvU#b zs^TLKi>h$%xVn+Yl*x8a&AQv2S@Lq)sSh-)Jh-ybp!{%1*yM- zyv2yz3k$BO9KSd2IUFrTyR<@Z2&n!*)%yiJ}}rrWZe+IbgQv6qPIu zgUNf@p%cGuWx`)FCt3l=j^~}Q{O8o7OTI#klZ_1$rY$V*B_LPD7nEF~u` zAY8seHszEmeUOK><9p@lJ2d$-dTOV3DtZncrqPD17^>y&QgjuwJhQDl%lVsa*hsVI zA;HK35)ex0oR%Pr%pMcp73)xexEG?1(dg_}Dg>npUN$q^a342$f>)2#m{PB-=dAcs zLaftS3SlsxZmrkVxhTWa*&2VH&PQ<^hZL<6%7@d(ouAck6HnY`vD7G$JtNwu?12l7 zp?1c*IC$;bZDWO_kS27vEkInachxCWP&;t$ee?01IV$n!>eM$-9BS7?7!*>f(+V5T zueX?Yu^obvOqCN>Iz_!0UN^dQ5*T9uv2X6DFnx{n$-b0@iBrzN)K|3|T@JT5xpdwl z#GN(97PVesz1~v3*6^iJ<|}Mh&t9+pE=_?udJz639STGPX|!8xjCRzZkD7>~=pfK0 zGCSjcc@>wQgY0ZGh7z(2nIlEy|i>xd6(Y9og(m^_8mD0MVuW189O;@bbL$rW z=jEkx?S}c8nFb)lKq!2w>%LdJba&fI&tNi?A>=+;Dnmg`Lek{8^NE-7*uEmt`+70b zbJuVi88FIgbF;?#PSzXReA~w|$w@w~CK7=Gi}+tTIyxvRDNXY4-emut>GvBV;f9~Q;26NJ_#GRahlP&s z9^D_|s&_?b{sQ&A46uJJdM(%cO>kWeJLi)b@)X^R(Or3Ow+&duxW~=Jftt1&A>#{j z@<=g?cTaNg-(gHc^pA(9-_?=EmNmudMp-e$>&6-P%+m!plFCt2TOBXf!!!N;oh$y3 zvqWYRaVk6Pns|%!x7zL>)gA=;ZdKf_bmQ1l#mtrHe>@Ht(qizCyiSMa?6_;$36@WX zR_!Lar*&0E_|fI%SuJibYd0SEZAeIpq&;`txQ>_n6c`~97|G{s-TkY$S<0#h@~ZvBS`fj+NkE|8q*hMXbm` z8f)EV4L%lrcdvEHL9tn7M$1L9@2&%I+AEs51W4tE5%TD1*<$Dir#N=LNn0i2xSAmW zyF7FT$z?!m7wDOQ{%3@xd2wcJNGgzGPxmOP7SYZ1faGKU13!&TtVD27So4Y$YfpPUg7X_w=lM+5DKdKVtNqy+V? zSNkem#l)t_+%}*%Iy2mySAqnWw(e^K>0A*yJh>=t-_2Hfc;Z@P&L){4e0N36iU#()NBwipG!4&)=3O%2V}J-lQt_JEEvy3V zRzRm&NrkJVihW&{0w;JL;%ZS$0U$$kzh8CWh?i_AokGwIk%?&8y%^kf0@wrzCa$x9 z>|X8(wUBJo&(Aw33ys*)*F~q;OdwE_%<>ihh5a9((qDk-%Mb~Wq9XvS0sVS94WU5< z{)pmH67fwp^kf6Fv^tpW#+Z}}e!_IPf5L=jCh{LQR!g??{<&7zmV&6)3Dq>t|9RO9 z;)b(7;)W{+n$@Hr6}hzU^sitfe@sD0b;g;73{1e7!nya5C;UGoK64n@Z2L`|H!_SA z_@*D;ql)Qgk9zI%Wq?Vmpw5$xh|T{e>;)n>+^*JjgV0K0B7dh1HIGcMpwArIG%pI2 zJ|CBIB*bxLsM=e2egjYh+v)Xz@fw>;?IQWNACDu-e1@9lEf)`?jzYPYwmWk$r4__- zCpxiQy524rm>ouy2|SB}X-r5Q?**qLT(Z~hJuSezmpw4OY-+t!%P34k2R#`VoATcR zs=%)O3DN-VWIj@aB;p4X5nT1%b%&&kV)4=9%xv$EZ})R!H$UKK^g9zie5z~z9L*St zu}O__uWAfRWZX74IVzHnZyPc1k+!ISKm&`idQkZ&6H((~H2*D|V}b!jgBp7KD!LK~ zBBXEDoa-MJUC>q&WqIJH(KzwNEoBl~}8#4LQ=hfL-V{#3CL6^Y`MHY63 z#Cdmk4~|S{e}Dh+#t7kht?p~&X~;xyts+bgA;~q)Er8k=kSSK3WK1FgK&*bAApI3C zmqrliHA|HKqyM;mJO*kE&Hs`^cpo53eN@%8eD!H2at#_d2+a6KWy_jQNE~Q@D4|S4 z3|&xNWJa~wEe6eoI!f7M+ugMagQO>8{Q407N+FfsE1yzn_|xB}Tu*#y=VBNSjm<4V zwA|laX#nw%vs`Su5$+QYF|FN3dspRXJ``MES(5f+t=K~{af~b;M}M1Ws+=12Hy{{> zfY?iL!#}pNYz3Bar2--R`1c{M?|8(@YWk^`3+X4mmRe?1`H~vK^V|9>q^v_$i+-=#j6Cg{It!Q-URd&^8gPggPvj52{d{UU`&?7@)XX0M zMaJHI80Mv={42L+mdBW9S4g-6DO8D9i*E%h8A;$M+Y^;meI)J*s?U&Tt2REYRyxcY z5LhR3WVpS|3IooV+XlIyX-G@3fzHqsm|1sKUs{23`a>~z`03$`gn1h&02uZIvRLVr zN-dLQ&zF0zSp~Et9t8N_@sM$IRi}0#)#fyq~#Q3P#jX%$oIK=@AbReB}AK+ z%N>M)V2NBTp_46$<>D-PFCPhlR*#W)my9^(G~G6gJa$L1$&pfm5wVc@_n~Y zIxB3jZWw%5!~=K_&bg&GF>4|S)!!G{onaRGMPHd&ES+kDbCEPh3C)LL`6 z1EupcT(zFLc}9Sgme+{JO2cu_;nkdAHG|QP)*4!7boi$YQSck3irHlAs94 z_-6I~Ql(Fj#F@}UV<^sQkdY)!&d?He{VNLoBjwd&8zlneZc56l4D$s?ZEO9~#u|(m zm6CCH*r1gBPzc5(*ey2`O0?0NtS=p)a}~C+-V^IetNWCzEAnRMw_+!E5Mg;usKZ2W zOQP4!FHGs_BU^6#`SuW7Fi-i+QU3~4$5lq{Ud&oQ&jqExHg^!^ZT#Tu6h=(iOY$N!(DUZh z`=-Zxm)WQ>YZI_kL9oYn-G^^&FyGILwEL>FOe_5L{A#>(g@MeQ+StpfBf^M%;rm;sZSKlY z&f{_y56OO?Z#^0=Pc4Et!n1#Oh>4Mu%8S*&%JIc0ZCd{9=!Yo22+HlE^ngvN*UcVh zLI-bXm6aZ|uanqztR@*H37*_^wN)9D6Oog*eqJ%~Y9gG2EsX!UK%?M??kLK2ObE7c zO$JX{c^e>Nj~=v`@K{^U{}??jFd9kW5Lx(9d06BL9b7=0J>TsP4`+GtiXtZ-=GeC& z37ln;I<=Pr;4b&MtmmhH*c$GXucAFw=~ae@G)Y}E7gbwFV6CjuQ4R;|a95Uhhm+_? z(ze+8QkI94knprn31`2nHcvldPOS%{==H(I@J!e=c`1i^G9n3i=dZ@QyW<`)zO$ou z%6HYV#BsV9C+UODT9)N@Qk8bkW^TU#)0>9q71YL(E=>^Yt$Ujpu1d`9$1P^#<@LKh z;?Fed4Ue&n{eH4&lk9((m!qy7I3JUy<-X87-Vm$^*)*R2l9?i zw$e!`cQr{+kc2`e6$QW7!BmG>uq6)3BIdbMr*Pm+6BT(cWs6rIb7gP?k4IlmJM`ES zI5T6w4$-YX7FR$s014#rI2jYt=VmXelg)gz3X#XY`1AXzw6M-{FXPKPPe#^Soyjsl z`H1)T-27-~v{Rsr5P##<4;vRn`V=|Dzlm+%EI+K~JjW#OrG}2QO z!G5LMQIrq*Wt=GiSS(nh9j4ArSn9T15O=nZ4W$qOU5l~ zC*v|U?li{T?X`^qQ3p5IjsD73e2C?-f?#ND8;X;?9dC6$SAu6shATMmY4h~{hjTHH z3da%4Db`?urg;LEP4j)tGDsB8RL0oVYRY!FBL7sc9CjxvucUUJ4h^T*S)5aF{R+9I zrsQR3k&GyHo?r!7JS{}0Qokc)jRO&SVf%IgMTT3gZg%xILZw!b11#=3?5l%nvHW#{ z+p$t*#;12^%IgqN^QbYpfXVP~`)`I|Zg_Ao$#LRX*D+p3khV)^Q2Xl2=1>U_!-mS5 z(Q$+#w$#2GjWt6s7KbC;J!k)rc=o&D-O3BVj9+Ce~lr7dhl|;Icu$9SeN+x zCu|#L^J4KGjn3!JDVElQi&>t)da9@7WJKWNcNIMTxTs5{u7Z51Og$()D;=17fefv( z*ZUr`D!wpYmA;a%7nB-~0+?`bgQe;^ztf^Z${F^)mF>f~1{Sd=($ki;vI#vEJ?|B7 z4uOL|`eEpIf&SV~Q6&Bda6+$ffDh~WEr(=f}(gY5G%de z`ZV1MuLWw`-9=b7aQ@+31WOu7+gp+fh8?L)YJlVdVI(w*Hvs>4N!_{Dz_WXJ-p_}Y;&!_BXAk0Y_srkB0Ob)mnAaWJ z^#?ZTrYD;&Bqi3#>*j8m?KD8Zg3ab6X(ft}0D8Rwa7M-4h6Flb&AIH^v7!_dM*!er z+#c}N#u{y(Q)!W{myC%t><&sreTV> zNN28p8Vl?=9W`|a?64XEKWB8)XUU&O#LaU*&HPmKQ0Dy}jjAr$Q-(+<)VDA)@1N3Q zR4#Sg1NjOS%@OlnCO^sNio0}_P5}L24Vay+ZB$+UpW)XP;CqPszs0YW-BVs-0IY`B zmtVqwjM~iy{po*meRo}0t6HY%xIJE!gQrq$I|J#mx1U{~_220TTw;*f17`jbNNn`3 zW+SG6YVmTLPkSgp>a`$TXxZ%VVgRb~pXYpmn%*k_CYSjNHJJ_x=^q{*P8V<{$S^Wd z86oC(`eU@z1l;%A!`ZCPv?B zdESRRVXAU_tRQJ4#r{g`tyZdzXb2bY5_3y$*?0C(WlUNPhvYzfBtY}*0kv%pC2r;N zI)=)J-*wksyM_J3Bwjyb*GPVAKsq<*%St^ehXXK+=@2*OZ-r4eHe(r$c0DVtl#RG! zJl#1k(2HLE7^|1lYj4Q+XFU^^)(OGCJaa>;6D7ty&kGmS5jKkpUcQNmj@uMBfd(e4 zI>P>PeMy@i1q^eXflGuq6_)qb#pV2$kMuz z;SSX6Tlnl@rF!1p;^N|GzCYaV3CrTO1~S4S13z~d6ZmCAY4G%{tE_U<9SLN0LM1-} zj1-!^8URSv0+_*J-Y5WCA2~5au|G#vbxNDs3DvX<%^x1ykJZZwGZ*)}5%#f)rwRpl z(0hrqbV=Z9#nRrYiMMrR(y9jOO9WWe={z(1hW@lxBMmnS)ieYWi8E%h5pgOMjNhp_ zC{Jd0821F9WDv-v4~kVEHGnDp0SnOLRYGW}b2oaq)7^g3tv@i5eJp7n#|i%t#%cn} zVAIpno8O9Gfk{vhCnhu&J&x4?C<8z!JOH>pSZeL3PbRs5)9!`{xy#Mz-CHqK%xgi? zVQ^_U&0kb|-H@jL=L=~fmz=v}_pUif(J9@GAh=!6?KZRzk`lZp3*g!Abc;e;hJ6lH znnzh@!+mn-JGfovOp&pc1In5f$zRu{zy$W5Oj(AQ_8Bgxh@ zq|2~iONxL^S0d{O2q82v@v(l;pjL~t9C>GEzHZn1J0>X>zeEAE*)JF9%aPJ{1>O^FnGbVtqc`Kw=`BY}x!;?P%~UG4JN02s7g_8^(AhML*Gj0Ef%MsW zV(VQO3wI{3Ep#xs+UcsArSGtCrsO~}_O+sZtigx8f7Nu)5$#t(bFl#CSayk?fATy!W6bBZ6_bk&mJ=5?RA;aGo zr4|~gC9tzHSE}1&m;G)$kYJFn7EOM=OrFTtklTEdnt5ZnT4$wYqX%&@TH9^C-aXa3 z+3uaQA@^R77rKYVD7E?SSuh8dwVkjA16*IQ1?5}+zMsd_Jnv=8Dd-iAIGON+?IZSS ztk!lEWx<2y9EW>{G;fo+V2q;lR+-om?CS)ZA6QaibWXK#vETJOa;uHVbO+Iw)O4p= zydOyDDCI6u!ze&(G@5ojh7qtejP@t zJstPKP=ao7l0=EL)Bt~*SLRFMK3oUq!-6$We1IE!>!SECT)U}{sNRz=@uXXN(@5#l z6O4eborn@?bA6wRXt{{h2uG@d>3TV#nfl#}X1|YKCeEJ$rB_kAYJYobgmHpw_RGDD z-k@L^zBx~A%-+v%; z;BrnvwDNgPg1xi|Wjjx@|JLgs zn#7;CAx%@dJe!+)(WLJ7b;Y7v@Bi;0?&#Yz2hA*;gBk$>B`BUZx>o54eU;Nqia_FG zx$SBfSE!A4lWym%sMB9!DnRw_&1$l!d!~RA0Aooe3^z(O47cBcc9rB#Ibb|d+V!Lk zZaskFfbi&U8AY*+(%$Qr{yNf{riun-OvenA>O2Gdp>XuVh5)n(XGkqQKmCJ>1Rs*d zGjT?9Hvk$+20jO`yOne3lP=Xo7mBBpHb)S-EhroOgrx(R!8D|>a42=onxktdhJEdW zr9>3;Q<{KnL7cm|ra*66*5I(-{sUM9+*w_&EJ*j>;uyBA0Y$}=C~Y8MAjxZ}6&}Y) z{iU>xpS%~P`+-@f+49SfKpo2c(A5<&C51Isi{kW?^)#dLac=%l8d~IVoo0`RA~jG< z22d-VJcHk1VeEkg^O!NkT+XNL08BOwi3bL;0Z+k%p5stSzc)eSt4V8g1J=T0xrheL zyi&$uFxK*zV6U}mL>5m6r@TRpRqy2<4|glk{vQ5N z{b%v}-*K7$0+EphPguyu9fy86D*WMV&AI>pDfgR+-}3gzYdQkJ)#Mw#;dbFV_}Tr1 z0&P?vXCKxnK(UCHi_#yDnORbuiAB{26=Pz{mw!x>7Qb1QLR!#Zn$NoS84>{M`RkvK zhs6x|-#Kerps6&l<$u%o(S{BT^?;)c!kB>0soSpPF59wKAIe(xDZXM9aNI-T@*ljo zZ8VZ5KIJ?!cGfn*Qejl|t7v+x@3)2ifWEPXTP+@qrx^NnQiM^_Oif`FFx`Kx>?dcP z>p(lu0kG@V`nkuEti_s@(&rwXz%M8q62Jv$f~JO-5f_7UEfG6-c2;t%xDTHq7nA|B zW#Gt6E(T-J48Zml_OR7WC@4*q-sLObKWKG!5@N6)nU4dx)tm;+hOEQj%WrulY5y+xV4Sx+C%5M;SX zzX@{ey%^JRv<*+IWp->;}1?YnD9RK<`0HVx1M;)-HOB76Nh;U(vX;_)!3-ORs+ z2eeDeKW7@^_cr_FrHY9ZryB6N?$sn0+TZnLDFJHm`pI9I6ypm!wbh%iLrt839Du@s z#{j9-yD>xcH5t&)8WaMed-U8${lC8615@`l@-NKk&i-Y{J*E#}PjE+2AQLqNUzD=E zXAvLAgBI-t>m9CtVQ%Gp1{fyks+=LMtL_;dnOVq!xXY>26a9XV)Qhn1uJr+Ht&H}6 zbfuYkED|9>viWFF_*&B~W`FYjX$123g(~VvaN597G$EZT$#>VpCjiqx=;L1#%Wrzh zU$FAnvmemiCzgxGR>#BHXb41q@zv-X)1C6d0_JNI;#X*Y*BiMsdkdA#nw$5}0aQFu~$<_Mxl zI0%f8&>HKIcxv4GM#`oL|~6Cv#esg!}-;Ym0go8EEm*HBvGvE%(<)4@rER2C6sF z(^DpAS3hTEhffieRqthh=bgqZ1b^QF{}XbenLhT6fR359cz*XttMLQXOQP-g1@fq>zoJMhkm}5KfO#-HDbXzs z@FSP)VUS{!b3e@%J;GU30?}rX>PAlTrg#E)l5@ecyLho{avs!4Ezkp0KuM9KvTsk-+epM{t`kbxMKRJq}nt<^CJv2{BC zq7oS5NW}Z@E%h_40s*|by~n|`c{pXNJiBOGATZqQnDto?9K&TVK~xgz5PHb7p=#&T zY@msl%0nARWO6)t#=ru4%x$AY%P|aif6W<$eM+BXap}}&`p3-jpGt=WoR&QTjbZ51 z_Y{QxsVe=8_^va4PO~;2YRC1}@91@+tNJKR2M;yJ^my`uMKaZSWi%d-J&=>qaxsLt zUE67}Hf`QLdMcy51A*fa;OvnA+Dok6o_N;gL+}B&t9O<4RkU{)n1S50)NCGDYERzs zCcXR1Pa!fmE|8O~*X9ER6lnaMQ>AaF9fk&BSVCn2wZ4=d%Y&GUA%5&I*fO!JwYW`Jqu7&cjf}6fNYMWg?4bhViCFd0J zFWTe)g3>euKWU%aW=~+YIl14u?Kif0czWX3BnAr>^ULLZD=1BK$KFujiIMK# zj{oso`!KPXI#*?eFpd|nX&B#K3BRw#%|L)YX%V`h>T!)(y7!_VqMiuC!3bUdu#x)m z)SH8BJ%FwW0<*Ide!FOXUu9HoIMsunYT&lf5r_xsjema^0O;e!<9YMxiFzZPiW8fb z;Ja(jy`I7Q>Rjzl84nTpBGhRLgI`wycJprl`JVP&s`I@06GVWwMEex zdLcNMaAs6KD|CmD`dE(tUtf#WKR%mf@{15N1iI(U%v6`Mzku6UkzxTY&Qj`E)Ca8I z{k;9!fdN6rGP7SFr#hS62Y$r&J_~e`lh^aTHy-rG41R#7z_u1|C=l5mheO=KWMptA_0%&b7v;gXC z!wjUF=ka}eK|*H_K(!ol9^P=VP^z z0_3UBdPrsBX;D+_&HdIC5)4P0 zYaGgQq<+=@Hk9|c`B$WR&l8JB=_`%Uuu_e-8Q9Bl+SQO*omb!%R-p(rr}~)kkYLcq z`3z|_h_aXL)VwS35HL>Ej?l^H{2Q)f`kR5eN6k1616d`NQ2v??W5Z)r^Jf$l&DOt0 z=O~Mq=U9rWNP&r#y1Ws;aFW$=Lx{I#J@yJvD+lgJGX^u1njBRkGTpy01kXY4Us(N< zM;QHm?I(CIUjO&f1Tb*ROR5=lA-sh;%-TPe&r$#BjsnP>+~^_;q-~w51%iOyjX|Rb)KtO8`W`dBpip)@jTr) zJ2$Q@dz2NdT<=Oq4p{Rie5v)$FNaurOW6v!u&TS|u0dXKGzZDVC5IQh2R3Tu+WWh^ z^9}YUKEIJGn$Kq8-gkQO@ztM3GK4HtsjV_hyx={;XKbek4SU>2 zR(tHu0`>Og>~5mka=Lplw{p61YKe{k@y0;2`zh0X8`I+)Guf(6)I^3~nZR^f?{2Sr zU!r5AUq@CGMn1Rjdh2|1=B`nQb2>Qs z)6VeYc!u@|%a*6i^HD1)0F>IRqxAuJ%hi57wXQ`OxA?p|ka^%+Qn`hIf~v zW82u_;h_{2PW($v>vgAH zNeLG1GMyBV#&Qnz|cMaE!9n>933QnKk`k>$Y5rZ>2(J#Lu$siA2(;c zcYj`Ct1Q+Tb?G@k&f5Y95}3T5C;Xl&+?j~`7vusP0iJ<0BYJ4<5C^>C@W-Ss*K{N1 z{SsgN6DLvg<;CL47-hl|lZ5)Qe@g#BJiTt*9-; zF>{zcIUF(de6Y$DD*!3>v~N%KJ+z3?cKc(~3|=aoav8HRnQw{7$|Q>GJAm^a5}8C9 zZ*McG$M1FM!7GT}aNxDpezkIV(D{JXi<^v8Tn8mfX@&R?rJ7320H-C~)>#GaTW>jk zrpP$Z-Q?ru2$aUUGh*?_nU+AbO2C-CU0CLmA|C6q-p!koTvIIRtqzjmZO?S-V7jZ# zJ1k3gy*VjOZ)p%zX2Ad#F2fe+OXHr!e^8=x4nUM0GpL3pn!!MIw7H1 zkZKU5w;%#Ry7Ufr#ou%8`R|;2&&*|DW)CabS+myO-(Kr`zV}U3p44)i zzSSyJrPI(zy0aZ(^_^bGtvz*~ ziKsp@)xHIUo?z>;=k-P|aWfvUzjOZ|4Yl2m(O}dygtS#HFgQy$YKuR4|rEex~@voG>udJ4oiUGi+66GtXKc zOg6@SEhz^&>J;OvZY);SKtr9myeHr5m^`r3)>0{yJ%gCQUx9>_ZuaY_p2VEX|^{%EP4oP}a z19i7a7TK4gE;^={H+zXoAHU1K*c4c!(1IJ8ylHvBpOGEK@eFi>f}^v`9n=9#LoXa2 z6wIXvn-?lyiN77&u=f<(^l`$bOvGikb-Syb+2c2PO^;&IbH3$j5aQ$vjFV#PM7JqS zKL!d6x^Kd9po6Msk=PblY0*0>>#8Oul{=1Sm3s{rnp4!Os_BijPd0$uAjgF40s&Lf`aVaIzo2$rGIta*U#l za&*l4T-15DJS9jXHPBkV7_J1V7o*VbOU>=Nc0x7%VJFAXNrMdNbjFBR!OJN33 zx&T@v?=@>|5RC^2tFH)_(k;@Qz$vQT3#L={e?sg0!opf0egskCZhv1-50LKhd!~Gx zqXK2Q`g^E9*cy_4KH6{y5xAPZ6cm&)-yq@CF=@gx@pF}CXa4E-4>C5bmJ4VHzF2iJ zXiu88B7DVF5{@)-Q18PG5bCAx0=4FVPfu^q9A!InT)ZVJjAUCr5z_gW;Oe7R8Sq2m zep)&+vr{pp5`fdTECQxj?6edD+7`BGmtb|;8?xOeh zA`>umff&g0UdLrRUyJLUyI;h4xWx|=QD;RgBQ5b>8!4C7k>gtt(-9b}8sCL^QLU5I zm!~e_hMMEu*Z4%r8l8pyF1nujp<7lw-;0-|G~G#_(UHYgoNglW z=joJkk6A~ZG8Eb%Yp!2wjynAM=Ir!uB-f_C5P=J1)XB*OM)|i}*2>w>(bE>SM7@8( z*QJ@4hmomA3X(3%aZfQP(Qgx<42?OYiIvBM_;)R%2C{huySi4xbGgLNaAp5g=aIjz zDX!VXt!b~JoPPn6$?Cs<-5~1ulLRu27VZ(5{Qy(U+VXhndf~Stm4)KbxiuR3`|p7A z1Q^|zIqgYYDn66KYs8-!bH}nW8=$iHRoYK9jtOpU=q#|@emckxbr_rlj#NB?r5%Wv zh{29@myFUINmbJ$f$s*H>2liVD|ofq1jwS^R7OX6qLIFGzq&)2m-jciGDudL_VR0o zHTJ=`MhvoV*xR8AIN`(v%DW6Fn|AXw$86XO%?u=@rKRQbKb+3F%_DCB$~d;-mVXTt z%>nrwey2l&(}q2+#rJgCr9Ud`Df?zuZ0goV^*OPh4|#V~8cZd*D6RZZ-1Y4oy9F`) zt8l)m;wKiC$+t7AH9z`#?aQ@%fp_=X%;y4l?tAo7k0g^S>Bik zhKYcvR}4|^EKHZzCGV!9=r8*cCaavF=~pE$4f_AX0P3~j1mqm^c40`%;&AHB0m^%`u~kTpLvt`2)eG% zT2(AnKvWj&L|e0e#%E4j(BY&jb>I7_tp5SfpgNQhRaa~pgxqN6w9_P_5FgS$$2{i+ zzpJLgfd3Dz;Ap0wpVj2HC4`AVpijRK!lMYDpZO>ueVXBAGaq_e?Z?3UN8eFIcU2hk zbjaafR-lVjgj2!pwh`O>vclLL6%fP`a^I}*feT<#dkXW-8C>v7VhZV7n_c)yPZGh= zHTjBx`ov=)vU2CXIX^IMYvf0TEQ%15YKuP(a13!S-5O3g7eV%Al98K$3Qa#D%AUwL z*(Q|rAu-YCeWWMeOz!RXxC{2M_)BXJTd(>-s)B zZSmMuhluqo3vtr(c>T6a!1+sSX3j`YS$S@1Gx7fA_58aE&$S=f*|)7>dvcScDNqJL zB|O((%*tEGWUz2%m4h@KmFtU%&95TWPYJ4&-;jOKbWf7$E(#M2*yV}LHCw9(4SFSm zK)>T#w;}Jbn?bg00){fxmCdPmQQ)E_@&@v|i0l%yxzACQ@oDMf5VDigzZF`mF(Q}N z%={YZoIZ4a>)6b-!3(%?BBc;->K8ME<02!M5-FeS7`32R7l}%leQr+gmnId2YV6y~ zGM&La%aPS*R?a+TiUeu%z4T* z8VeqQPd$q@@Ibq5PS$SQ0j+zU^|khU#_4x5j%)F|X+|cR9HDq~b0*$aP#|`EZhP+m zsEO02{NJQ#+MBv(KY)bv?>rA6JYGa@fnv^rRUYh)s!2Qo4$0;LEnFy{T~-_zXHo?RN;TzjJqY zB(@45{$#;;c}?6GRlVO!v#I>*75Nz+=En!nI6%r+0c*c}560kDkQo4J%ajy?LL5kQ z@weVG)pv3}Ws>F26XIr8eZ+<6{u`ip^D&i1)~_gsi&XYwT+C>hy?p@T5WfJxOOT} zs+lrs`($u;XKz0}o%i-%sQb2kI#vjjdNg4+=}eub$LIQv3yqM85TI|@lw66a*EZ@^ zFSL6%IyrinI<+S{+iQnD3iEsW=iRV$?~_m$RmS?!Co5{fH+lzg(vBkUKU(RMb5B%% zXQ_BZb_k)y;a|}k-X3U%0m%lEu76Lm|NT^g?mY#g_4GDKomaWDbh%9?yS&_c`Z9Ux zJs_u}B$4eFqv7(Fh98260y)6P0KLweTw{a?^M7tBB0SGn9mc(-Cr>zVlMsg4xqifr zu%lv9_S=Txr+&|vOy{wtWmiz<_&O9?oFhb?@)V#^G5~i5q;-lXcI1A6ELLUz=57*^ zQKauPj+rLc@vx)(uHnS^$a3I?VKcj5&sLM2)SsXC2L-_DYWGrp4Cw#nWX24s_tMM> zwqzpfy**s(Da!Bq%v*If>26vfd@v&NpU#seu6wmGKHiI%OkVA^8H@5L&R>So2%O|c z$`>^X(r#0;=1ei@zu4QiwwDJ`&;QKdW`>{29s^Xc7Up=3r*UHZycuzVk!Sjfy$%qHf3=;PV;V=`C->` z^G<&iHNI{{;T#?kNL%3oyVWaL8#>y&X5Du`Xm;cjC_G4`{;5#(FgGoS6qklQS<_n! z;jTC6Ok6(mNIrBOv7LG%bME4r2x7ooYjiqP{Xpl)SQRP5E3;AOX58pX=W-q5#p@8j4KVsif)TiDSAP?GT*=ZntK3=mSC=BUXiTg zJ5;aZIKS5S1{$<5x^gF?x+OZDQemTl#$TB2(BVd{-Jn+A8htk2q~3&Ju&N27MG>3` zS8;l#tlKx?Q9r5TTb5TKG7UMW5k5DzA~Dgxa&H;sWUWZ~)!WG4e&|A@Jbvm!e4Q&X zGZiboPpHH)@akc!5B)0Q3YYRrw8*`@*5)pShz|-m?h~3Ob8ezK&3iqI@8zSf==bJZ zb5`Db8f;zqf}Va0bXmv!0=l{oqCL zgDw{;$Sl&oz_o8}vHB$ouZuwaSm4AB(}17IlubQzE!Ww7W=R_j+OP+$(1$xjcu`Dw zxn#Gn*1Eb`-)7*cvEAfa2Eo2s$O(e3o~{Z9s%>j*ZL(q~GA|9gTsINj$R(Fe5+3I6 zDa-0}udvZLAkDKU%XVf-DBZ6tfK<9B!OYNu$#L^pVoK|t;|Se(Ls;;Y&ddQNNPEGg zfl9*CzG5yahL$$B>>CVLt-BSY%b>XltH2Y*p>IDYD@XMrq;;K04E0aQIQ` z;`B=0S3d$wvV9?Nm0-iJ==1$eigd%y?BX}7H_x6C7lyHjqG3a$@_O)7_N~C5CX_7~ zrGO)4RIQrFx#gvK!}ZE+=v%EdXfN>5jn6Qcy4`i6cb;WoYeni<2^b!6O});Nsk2W# zE5A!r*X&5!d-f`RGY$Lm9YWGqF>{kRH$S_xHBhP&9~;}#Qz$AbTAZJ6fpxRGb?X*{ zuyZ3>fE!MXFGd-;<-p+VdJ|Ef)&yH|hSkx=(qFO%+LG-%SlC*SI+g;4{Us}xgd#re z-07|NUP<)IkfP@|*1p(NOGkUJ`|XfueKpf529TwXi;Zoh9RC;=BjYww?X&!CusrB; zHn3gM%$X&K^we@#tS&ChEIix!rGEWY04e8OsZpKiy07JifZ<^0$+x=bk47y{_`8|B zbLXMX0TS%-Yw7(vKTaQYNZUut%HZwi!9 z=7^t$6FV>{8RSOEJDB)}s1LuoSJa_tb##)9WEjqfXP0IE$b)5b4~%W)b+c1i@Mh$C zU2CVggwG8e1{Gr`#>EshKTtZc`n86NtF+~!+{%G-@xsj9Tuo3=E^hlf`tp*VuI|+Y zaJ#^XO{pl>8JD~1Vj6Gn;x#mn4y9czmKbxL+N`I=I1_Ji25xl$pRJ)G;$US#;8^`j zVIe`fhzRBFxj{iw3=!|O8p;qK_DK!yb*!h>V72ekgy=MH}(!!Yq!sgPvzZJo-r#KH>_4K}mP_5EXQ#bK9O)PKi z?`}3Xad&rjfdz3vGq`8@ZV+I;YOOXq7KWVjl{?g*bt_j)UYFS7dji|A;4`E(93Aj? zH{>KwJ8-CXkN;fsyP)Wt&u`4wFSYdAOy~^lsNb*ekJ_iej>*W#NS%e5a=DC9M-- z>%M0Cp{)`}`M~?7@VQwV941+M*E&pU@fgcH`vup_eY;l4DMb8Rqg$nM3QGwtF z1qDNY4*Opsr6l)CYC-WmpPHIl;GucU1`UNOGniZx6BFmY!mf%|Lb?nD1*f2x00FON zbnzz7%CB*?)?%o!aZ*y!q?_Fy>IlVc5ZTfrL4M}p;s~l$ltZ>8XiA%7(_M=&eBhIw z_~o9oK}Uvu*~LV^mn`i^`|k+rST9FOA&kxpwzl3{seZT^#5=cnSbMm}85mTNTP?dU zlOnv@*XwG+CT6m>P;szP^Ysb;X8gzaT$D_h!$HZU%MEepr|=FUb6s4j%7YjFs$Q$9 z80L&)Y~J&mG6?OSV@TkXC~11<83<;;N9Nc&3;`y-v=Vh_4R*vC@l?82m$QL&96~%U zK0Yr#JPoV%ONr}%^o7zP{Lb_;#Z@fvlFcvc)xfo%=xg$FNV(hU32p~V;~C4#%@b-V zpQxxr1UetKALYJ57``rrNIubpE^<_Q*!$k6WWpzy=ST1fLoSK?^2hoO_g$}XEJ-bm zk4I1~AGOuKlc^VY3f*4DXdAYmJ%XP++^$h$RofJZ=w>HX{PhG1jEh!-*%O(Tki%YrUb;^)4 z%!E_EySpZCd_rjSk@E)V+c=)2q^P(zm2$YfSZ{LqQw{?r5Td^9v$r^=Hdj?>UfMkD zoj;~=9%=@nq}eL;#pwm(c&puegO8LAN+weH=bi-Z6?C4hmi{(IO%E=&-F>GR)31Tc zyS?KFG^?gb&!D0rMb?VNWkNkc#Sb@|n3j%S*GF9HP$dkbr4V7{S?EK~3*<;4t9BfT z0_aBlxIWHmM?Z>lP2kCkwDWJDOLt-=43z|o#yi@qH1wuJpMA+#a4w8vJ`sy($tFQ2 zThg$5kAJp6o#h{fb>*jjU8~wUx*#5;R;-My?qc5R5%tqw(Q7+bo$N>PJZ>&+v#pM( zK@3wjR(vPBS-?8i*036iV6d)U^1wwJA6Oj$p}Gjw4vCC+sT?X5j3Y7YAlr%WJDWkL@xoQn7a zAgsc~*HiN^UX(lph@39anb;MnFIjVQTg=Tg>zWv9eYW@D;K;H!H{&|z+))WR9BE5;zo zD9xJ|POQpD>2$HxccAlQTOnv;LD(maqYpvTQP5O?Dko&Zx8!vk;V|Fm*ByD`F_bQp zQcI1d;5;@2g{SCWl`e2tpmupvk1skH@(QecWzeq9#FL>C9S#0)m|e6-a}N?797k@! zvMcn|vQhUBRqE=wwnOqJpI2L9nX`Vcmi<5rP5(&cDSFD@w~_(3br|Sn!^zJ@S{MCQ z=mkqD{|sT_N(hgV2G0Kc3$_+mE-Hs445ZwMsShTf`hO_oJ;`&$U43%C`}-Hw%o~IY zu{XNTtDb@r@0^V8qgeT~00sXGCJ!40bbM1vh&+BvoxnEfZ-M$>2Khf7wjCbP5-%0f Ut5honxQ61EhORp1#+{J=0)zGso&W#< literal 0 HcmV?d00001 diff --git a/docs/zh-Hans/images/layered-project-dependencies-module.png b/docs/zh-Hans/images/layered-project-dependencies-module.png new file mode 100644 index 0000000000000000000000000000000000000000..7592f49878353c153f529ba7e6e605fd11dcb2f1 GIT binary patch literal 38795 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 EQBT_1T- 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 D?t*yF literal 0 HcmV?d00001