ABP vNext : 项目结构解析

本文从一个最简单的项目开始,通过一个小例子了解一下abp如何创建一个项目,并进一步学习abp自动生成的各个模块的含义及使用方法。
# 一、创建项目
## 1. 安装cli

首先在命令行安装cli:
`dotnet tool install -g volo.abp.cli`
如果安装过了,需要更新可以执行如下命令:
`dotnet tool update -g volo.abp.cli`

## 2. 使用cli创建项目
----------------------
abp的提供了多样的项目类型:
options
+ --template 或者 -t: 指定模板. 默认的模板是 app,会生成web项目.可用的模板有:
* app (default): 应用程序模板. 其他选项:
- --ui 或者 -u: 指定ui框架.默认mvc框架.其他选项:
- mvc: asp.net core mvc.此模板的其他选项:
- --tiered: 创建分层解决方案,web和http api层在物理上是分开的.如果未指定会创建一个分层的解决方案,此解决方案没有那么复杂,适合大多数场景.
- angular: angular. 这个模板还有一些额外的选项:
- --separate-identity-server: 将identity server应用程序与api host应用程序分开. 如果未指定,则服务器端将只有一个端点.
- none: 无ui. 这个模板还有一些额外的选项:
- --separate-identity-server: 将identity server应用程序与api host应用程序分开. 如果未指定,则服务器端将只有一个端点.
- --mobile 或者 -m: 指定移动应用程序框架. 默认框架是 react-native. 其他选项:
- none: 不包含移动应用程序.
- react-native: react native.
- --database-provider 或者 -d: 指定数据库提供程序.默认是 ef.其他选项:
- ef: entity framework core.
- mongodb: mongodb.
* module: module template. 其他选项:
- --no-ui: 不包含ui.仅创建服务模块(也称为微服务 - 没有ui).
* console: console template.
+ --output-folder 或者 -o: 指定输出文件夹,默认是当前目录.
+ --version 或者 -v: 指定abp和模板的版本.它可以是 release tag 或者 branch name. 如果没有指定,则使用最新版本.大多数情况下,你会希望使用最新的版本.
+ --template-source 或者 -ts: 指定自定义模板源用于生成项目,可以使用本地源和网络源(例如 dlocaltemplate 或 https://.zip).
+ --create-solution-folder 或者 -csf: 指定项目是在输出文件夹中的新文件夹中还是直接在输出文件夹中.
+ --connection-string 或者 -cs: 重写所有 appsettings.json 文件的默认连接字符串. 默认连接字符串是 server=localhost;database=myprojectname;trusted_connection=true;multipleactiveresultsets=true. 如果你不想使用默认,你可以设置自己的连接字符串. 默认的数据库提供程序是 sql server, 所以你只能输入sql server连接字符串!
+ --local-framework-ref --abp-path: 使用对项目的本地引用,而不是替换为nuget包引用.

**abp提供了多样的的配置项用于创建不同类型的项目**,为了尽量减少项目的依赖,便于理解,我们选择module模板并指定不包含ui。
执行如下命令,创建一个博客项目:
`abp new flylolo.blog1 -t module --no-ui`
未指定 --output-folder的情况下,会在c:users【用户名】下创建一个名为flylolo.blog的文件夹。
#二、项目结构
##1.文件结构图
默认的文件结构如下图:


图中红框中的docker、git等相关文件暂时忽略,不影响对项目的理解。
在此目录的命令行执行“dotnet restore"还原包。
##2.common.props
common.props文件是一个通用的项目设置文件。其内容默认如下:
``` latest
0.1.0
$(nowarn);cs1591
module
```
随便在vs中右键点击一个项目选择【编辑项目文件】,例如“flylolo.blog.application”项目的项目文件内容如下:
``` netstandard2.0
flylolo.blog
```
其中可见对common.props文件的引用,而且两个文件的内容格式非常相似。可以想到common.props文件是将解决方案中众多项目文件中的通用部分提取出来,就像多个html文件引用同一个css一样。
例如需要在项目设置输出xml文件的时候,如果部分公共类未设置相应的注释,则会有警告出现,这样的情况一般在项目中设置cs1591取消警告,如下图

而在common.props文件中我们看到了cs1591的设置,这使所有引用了此common.props文件的项目都取消了警告显示。如果我们还会需要设置csxxxx或者有其他多个项目都要修改的需求,只需要改common.props文件即可。
##3.解决方案介绍
解决方案如下图:

可以看到所有项目分部在host、src、test三个文件夹。
host:主要是存放web/api项目。
src:存放应用层、基础设施层等。
test:存放测试项目。
------------host-----------------
* **flylolo.blog.host.shared**
此项目比较简单,只有一个类,multitenancyconsts
![](https://2i3i.com/wp-content/blogimages/13407215/548134-20200806221109828-1632459948.png)
```
public static class multitenancyconsts
{
/* enable/disable multi-tenancy in a single point
* to test your module with multi-tenancy.
*/
public const bool isenabled = false;
}
```
用于设置是否开启多租户功能。
* **flylolo.blog.httpapi.host**
业务api项目,集成了swagger,是业务api的访问入口,但实际上大部分业务代码均不在此层,见下面项目介绍。
* **flylolo.blog.identityserver**
abp集成了identityserver4,此项目就是利用identityserver4实现的认证服务。
-----------src--------------------
* **flylolo.blog.httpapi**
controller层,自己写的controller放置在此层而不是host项目中。
* **flylolo.blog.application**
service的实现层,主要的业务代码大多在此,
* **flylolo.blog.application.contracts**
contracts,合约、契约的意思,其中主要内容为dto和众多的iserver接口。
* **flylolo.blog.domain**
用于放置实体和仓储接口等。
* **flylolo.blog.domain.shared**
包含常量,枚举等类型,可以被所有层引用,所有不能包含业务逻辑等。
* **flylolo.blog.entityframeworkcore**
基础设施层,通过集成entity framework core实现对数据库的访问。
* **flylolo.blog.mongodb**
基础设施层,对mongodb数据库的访问。
* **flylolo.blog.httpapi.client**
用于设置代理服务,通过abp框架提供的动态代理http c#客户端的功能实现对其他服务的访问。

本文链接:https://2i3i.com/13407215.html ,转载请注明来源地址。
暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇