天天看点

Abp vNext 实战 - 1简介建项目

Abp vNext

简介

Abp vNext 是Abp新开源项目和原来的 Abp 是分开单独的项目,之所以新开是因为现在的这个版本是纯洁.Net Core版本、完全模块化的版本,现在最新版本是V3.0.4,源码在 github.com。其实现在我们将Abp 基本都是讲的Abp vNext.

他比以前的版本更精致,颗粒更小,开发者的选择跟多!虽然他是集成了许多种最佳实践的套件,但是他每一个小的模块功能都是能单独拿来使用的!

而且现在更新的频率也很高,所有的bug、建议、问题很快得到响应,让这个项目成长的跟快,更成熟!

当然新项目也是支持多租户的,不同租户的数据相互隔离,进行编码的时候完全感受不到多租户的存在。

具体的在官网有详细介绍 特点 下面简单罗列下

特点

  • CLI 支持命令行
# Create a new layered application
abp new Acme.BookStore

# Create a new layered application using MongoDB
abp new Acme.BookStore -d mongodb

# Add a new module to the solution
abp add-module Volo.Blogging     
           
  • 模块化 & 微服务兼容 (.Net Core 本来就是一个模块的设计思路)

这里简单说下 模块是偏向逻辑和抽象的一个东西,而组件是一个偏实现的东西。怎么说呢?

一个dll是个组件,Java里就是一个jar包;比如微信功能做一个模块,这个微信模块里面可能就用了很多个组件

继承AbpModule就可以写自己的模块了

public class BlogModule : AbpModule
{
            
}
           
  • 实现大部分日常需要的横向功能 如:授权、验证、异常、缓存、审计日志、事务管理等等
  • 多租户
  • 虚拟文件系统
  • DDD 领域驱动设计
  • 支持替换 DI (ABP vNext 默认使用的是 Autofac 有些高级应用需要,建议就用默认)
  • Http Apis & 动态代理
  • 主题皮肤的支持
  • 文档是有中文的

    当然建议看英文的,因为是翻译,翻译就有好有坏嘛

简单总结:

  • 快速搭建

  • 从.NET Framework 开始很多年的沉淀,单元测试覆盖全面

  • 如果你的开发团队在100人一下,我觉得如果自己去找轮子的话,费时费力不说而且很有可能还没有Abp做的更全面还坚固扩展性、灵活性,以及他由单体转微服务的话都不用做代码迁移!

学习质料

  • 官网 https://abp.io/
  • 文档 https://docs.abp.io/zh-Hans/abp/latest/
  • 源码 https://github.com/abpframework/abp/
  • 国内团队打造的Abp模块开发项目,现在有很多如 微信、cms、商城、各种Sdk 等等的实现 https://github.com/EasyAbp

其实Abp的基础知识不用过多的研究,他都是Core的一些封装抽象,多实践,加上阅读源码就可以了。

难点和重点是模块开发、Api动态代理、DDD、数据访问这些点。

这是个实战系列就不过多讨论理论的东西了,现在直接到主题就是实践。

环境

IDE随意,vscode、Visual Studio、vim 这里说的是这个系列我这里的环境:

  • Windows 10
  • .Net Core 3.1
  • Visual Studio 2019 版本16.6.4
  • Microsoft Edge 基于 Chromium ,完全不必担心用Google Chrome 是一样的,个人觉得Edge好用
  • Windows Terminal 用这个把CMD换掉吧,又好看又好用!

开始

新建项目的方式

第一种:vs 建项目,手动添加项目和 Abp 的 Nuget

第二种:Create New Project 点开:选择 Direct Download 这个Tab,填完项目名称等后 点击 Create now 就会把创建好的项目下载下来了

第三种:推荐这种方式 CLI 命令行创建

  • 安装Abp CLI 工具
#安装
dotnet tool install -g Volo.Abp.Cli  
#更新升级
dotnet tool update -g Volo.Abp.Cli
           

创建项目

Abp 项目有三种 Application、Module、Console 我们这里先做一个完整的项目选择Application 他们各种的 用途 在这里有解释。可以先简单理解:Application 是一个完整的带Web的项目; Module 开发模块,服务的项目;Console 就是控制台程序。

使用第二和第三种创建方式都会生成一样的文件:

这里以项目名 CLI形式、DG.Blog项目名 为例

PS C:\Users\huang\OneDrive\doc\abp> abp new DG.Blog
[16:41:24 INF] ABP CLI (https://abp.io)
[16:41:25 INF] Version 3.0.4 (Stable channel)
[16:41:26 INF] Creating your project...
[16:41:26 INF] Project name: DG.Blog
[16:41:26 INF] Mobile App: ReactNative
[16:41:26 INF] Output folder: C:\Users\huang\OneDrive\doc\abp\DG.Blog
[16:41:30 INF] Using cached template: app, version: 3.0.4
[16:41:32 INF] Check out the documents at https://docs.abp.io/en/abp/latest/Startup-Templates/Application
[16:41:34 INF] 'DG.Blog' has been successfully created to 'C:\Users\huang\OneDrive\doc\abp\DG.Blog'
           

生成successfully了,打开目录看下有两个文件夹:

aspnet-core 和 react-native

react-native 是移动端的我们主要看aspnet-core这个文件夹:

│   .gitattributes
│   .gitignore
│   common.props
│   DG.Blog.sln
│   DG.Blog.sln.DotSettings
├───src
│   ├───DG.Blog.Application
│   ├───DG.Blog.Application.Contracts
│   ├───DG.Blog.DbMigrator
│   ├───DG.Blog.Domain
│   ├───DG.Blog.Domain.Shared
│   ├───DG.Blog.EntityFrameworkCore
│   ├───DG.Blog.EntityFrameworkCore.DbMigrations
│   ├───DG.Blog.HttpApi
│   ├───DG.Blog.HttpApi.Client
│   └───DG.Blog.Web
└───test
    ├───DG.Blog.Application.Tests
    ├───DG.Blog.Domain.Tests
    ├───DG.Blog.EntityFrameworkCore.Tests
    ├───DG.Blog.HttpApi.Client.ConsoleTestApp
    ├───DG.Blog.TestBase
    └───DG.Blog.Web.Tests
           

VS 打开 DG.Blog.sln

打开是这样的

Abp vNext 实战 - 1简介建项目

项目分层就可以看出是按照DDD来分的

  • Domain.Shared 项目

    解决方案的领域层. 它主要包含 实体, 集合根, 领域服务, 值类型, 仓储接口 和解决方案的其他领域对象.

    实体和 Repository 接口都放在这个项目中.

    依赖 Domain.Shared 项目,因为项目中会用到它的一些常量,枚举和定义其他对象.

  • Application 项目

    项目包含 Application.Contracts 项目的 应用服务 接口实现.

    依赖 Application.Contracts 项目,需要实现接口与使用DTO.

    依赖 Domain 项目,使用领域对象(实体,仓储接口等)执行应用程序逻辑.

  • Application.Contracts 项目

    项目包含 应用服务 接口、应用层的DTO. 它用于分离应用层的接口和实现. 这样就可以把契约共享出去成为系统的标准.

    依赖 Domain.Shared 因为会在应用接口和DTO中使用常量,枚举和其他的共享对象。

  • EntityFrameworkCore 项目

    集成EF Core的项目. 定义DbContext 和实现Domain 项目中定义的仓储接口.

依赖 Domain 项目,引用实体和仓储接口.

我们这里都是默认配置生成的(abp new DG.Blog),所以有EF Core,他不是必须或一定出现的项目
  • EntityFrameworkCore.DbMigrations 项目

    EF Core数据库迁移. 独立的 DbContext (仅用于数据库迁移)进行迁移动作.

    依赖 .EntityFrameworkCore 项目,用应用程序的 DbContext 配置

  • DbMigrator 项目

    控制台应用程序,有单独的 appsettings.json 文件. 记得配置更改.

    依赖 EntityFrameworkCore.DbMigrations 项目 访问迁移文件.

    依赖 Application.Contracts 项目.

  • HttpApi 项目

    定义API控制器.(Abp会自动动态创建,有需要另外实现的可在此项目中实现)

    依赖 Application.Contracts 项目,注入应用服务接口.

  • HttpApi.Client 项目

    客户端代理使用的HTTP API项目.

    ABP动态 C# API 客户端功能,你不需要手动的创建C#客户端代理,除非你有单独的需求.

    依赖 .Application.Contracts 项目,使用应用服务接口和DTO.

  • Web 项目

    用户界面(UI).ASP.NET Core MVC UI, 或者Angular

    依赖 HttpApi 项目,使用API和应用服务接口

  • Test 项目

    这个自然是测试

下一章 我们开始配置数据库,迁移,让这个项目跑起来!

abp