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/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..e7f5951f43 --- /dev/null +++ b/docs/zh-Hans/Blog-Posts/2019-06-19 v0_18_Release/Post.md @@ -0,0 +1,89 @@ +# 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). + +## 更改日志 + +以下是此版本附带的一些其他功能和增强功能: + +* 新[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). + +有关此版本中的所有功能,增强功能和错误修正,请参阅[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)作为开始. 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 0000000000..307e3516a5 Binary files /dev/null and b/docs/zh-Hans/Blog-Posts/2019-06-19 v0_18_Release/mvc-template-solution.png differ 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 48bdcd30a2..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 @@ -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` 项目,因为它需要使用领域对象(实体,仓储接口等)执行应用程序逻辑. @@ -169,7 +173,7 @@ ABP有[动态 C# API 客户端](../AspNetCore/Dynamic-CSharp-API-Clients.md)功 > > 你可以在表示层中使用领域实体和仓储,但是根据DDD的理论,这被认为是一种不好的做法. -#### 测试项目 +#### Test 项目 解决方案有多个测试项目,每一层都会有一个: @@ -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 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 0000000000..181924dd90 Binary files /dev/null and b/docs/zh-Hans/images/issuemanagement-module-solution.png differ 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 0000000000..7592f49878 Binary files /dev/null and b/docs/zh-Hans/images/layered-project-dependencies-module.png differ