zoukankan      html  css  js  c++  java
  • Abp vNext 实战

    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做的更全面还坚固扩展性、灵活性,以及他由单体转微服务的话都不用做代码迁移!

    学习质料

    其实Abp的基础知识不用过多的研究,他都是Core的一些封装抽象,多实践,加上阅读源码就可以了。
    难点和重点是模块开发、Api动态代理、DDD、数据访问这些点。

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

    环境

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

    开始

    新建项目的方式

    第一种: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:UsershuangOneDrivedocabp> 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:UsershuangOneDrivedocabpDG.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:UsershuangOneDrivedocabpDG.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

    打开是这样的

    项目分层就可以看出是按照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 项目
      这个自然是测试


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

  • 相关阅读:
    把excel导入的自定义时间改成yyyyMMdd
    sql多表查询时怎么获取查到的字段
    select 和 input 的不可编辑,input隐藏
    关闭dialog(lhgdialog)
    ajax 和 post 传多个参数值具体怎么写
    弹出提示框,对话框
    function方法中this的用法
    combobox获取值
    easyui-panel 滚动条禁用
    字符串用逗号隔开;有逗号的字符串遍历
  • 原文地址:https://www.cnblogs.com/huangyoum/p/13355600.html
Copyright © 2011-2022 走看看