本文忽略对abp vnext框架及DDD软件开发方法的解析,直入主题,讲解一个功能实现中各层代码的实现,步骤如下:

1、下载模块框架代码

通过使用 abp cli或者直接通过官方进行下载,如下图:

2、领域层定义

领域层划分为两个项目:

  • Domain.Shared 包(项目) 命名为CompanyName.ModuleName.Domain.Shared,包含常量,枚举和其他类型, 它不能包含实体,存储库,域服务或任何其他业务对象. 可以安全地与模块中的所有层使用. 此包也可以与第三方客户端使用.
  • Domain 包(项目) 命名为CompanyName.ModuleName.Domain, 包含实体, 仓储接口,领域服务接口及其实现和其他领域对象.
    • Domain 包依赖于 Domain.Shared 包.

1)实体定义

using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using System.Text;
using Volo.Abp.Domain.Entities.Auditing;
using Volo.Abp.MultiTenancy;namespace demo1.Articles
{/// <summary>/// 文章/// </summary>public class Article : CreationAuditedEntity<Guid>, IMultiTenant{/// <summary>/// 租户Id/// </summary>public Guid? TenantId { get; private set; }/// <summary>/// 标题/// </summary>/// <returns></returns>[Required][MaxLength(100)]public string Title { get; set; }/// <summary>/// 副标题/// </summary>/// <returns></returns>[MaxLength(100)]public string SubTitle { get; set; }/// <summary>/// 作者/// </summary>/// <returns></returns>[MaxLength(50)]public string Aauthor { get; set; }/// <summary>/// 内容/// </summary>/// <returns></returns>[Required]public string Content { get; set; }/// <summary>/// 来源/// </summary>public string Source { get; set; }}
}

2)仓储接口

一般存放在与实体定义在同一个文件夹下,命名约定为:I{实体名}Repositor,如:IArticleRepository。

using System;
using System.Collections.Generic;
using System.Text;
using System.Threading.Tasks;
using System.Threading;
using Volo.Abp.Domain.Repositories;namespace demo1.Articles
{/// <summary>/// 文章 仓储接口/// </summary>public interface IArticleRepository : IRepository<Article, Guid>{Task<List<Article>> GetListAsync(bool paged = true,string sorting = null,int maxResultCount = int.MaxValue,int skipCount = 0,string filter = null,CancellationToken cancellationToken = default);Task<long> GetCountAsync(string filter = null,CancellationToken cancellationToken = default);}
}

3、基础设施层的代码变动

  • 推荐 为每个orm/数据库集成创建一个独立的集成包, 比如Entity Framework Core 和 MongoDB.

    • 推荐 例如, 创建一个抽象Entity Framework Core集成的CompanyName.ModuleName.EntityFrameworkCore 包. ORM 集成包依赖于 Domain 包.
    • 不推荐 依赖于orm/数据库集成包中的其他层.
  • 推荐 为每个主要的库创建一个独立的集成包, 在不影响其他包的情况下可以被另一个库替换.

 

using demo1.EntityFrameworkCore;
using Microsoft.EntityFrameworkCore;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Linq.Dynamic.Core;
using System.Threading;
using System.Threading.Tasks;
using Volo.Abp.Domain.Repositories.EntityFrameworkCore;
using Volo.Abp.EntityFrameworkCore;namespace demo1.Articles
{public class ArticleRepository : EfCoreRepository<Idemo1DbContext, Article, Guid>, IArticleRepository{public ArticleRepository(IDbContextProvider<Idemo1DbContext> dbContextProvider) : base(dbContextProvider){}public virtual async Task<List<Article>> GetListAsync(bool paged = true,string sorting = null,int maxResultCount = int.MaxValue,int skipCount = 0,string filter = null,CancellationToken cancellationToken = default){var query = (await GetDbSetAsync()).WhereIf(!filter.IsNullOrWhiteSpace(),u => u.Title.Contains(filter)).OrderBy(sorting.IsNullOrWhiteSpace() ? "CreationTime desc" : sorting);if (paged){return await query.PageBy(skipCount, maxResultCount).ToListAsync(GetCancellationToken(cancellationToken));}else{return await query.ToListAsync(GetCancellationToken(cancellationToken));}}public virtual async Task<long> GetCountAsync(string filter = null,CancellationToken cancellationToken = default){return await (await GetDbSetAsync()).WhereIf(!filter.IsNullOrWhiteSpace(),u => u.Title.Contains(filter)).LongCountAsync(GetCancellationToken(cancellationToken));}}
}

4、应用服务层的代码变动

将应用服务层划分为两个项目:

  • Application.Contracts 包(项目) 命名为*CompanyName.ModuleName.Application.Contracts,包含应用服务接口和相关的数据传输对象(DTO).

    • Application contract 包依赖于 Domain.Shared 包.
  • Application 包(项目)命名为CompanyName.ModuleName.Application,包含应用服务实现.
    • Application 包依赖于 Domain 包和 Application.Contracts 包.

 

5、数据库迁移

使用add-migration 和Update-Database进行数据库迁移。

总结:每个领域功能的开发流程大致如此。

基于abp vnext手动编写一个功能的完整步骤相关推荐

  1. 阿星Plus:基于abp vNext开源一个博客网站

    作为微软最早迈向开源的重要软件之一,.NET 5的发布具有重要意义! 微软希望 .NET Framework 开发者能够迁移他们的代码和应用到 .NET 5.0 上,为明年发布的 .NET 6.0 将 ...

  2. 基于 abp vNext 和 .NET Core 开发博客项目 - 使用 abp cli 搭建项目

    基于 abp vNext 和 .NET Core 开发博客项目 - 使用 abp cli 搭建项目 转载于:https://github.com/Meowv/Blog 首先,默认咱们已经有了.net ...

  3. 基于 abp vNext 和 .NET Core 开发博客项目 - Blazor 实战系列(三)

    基于 abp vNext 和 .NET Core 开发博客项目 - Blazor 实战系列(三) 转载于:https://github.com/Meowv/Blog 上一篇完成了博客的主题切换,菜单和 ...

  4. 基于 abp vNext 和 .NET Core 开发博客项目 - 定时任务最佳实战(三)

    基于 abp vNext 和 .NET Core 开发博客项目 - 定时任务最佳实战(三) 转载于:https://github.com/Meowv/Blog 本篇继续围绕抓取完成后的操作做一个提醒. ...

  5. 基于 abp vNext 和 .NET Core 开发博客项目 - 完善与美化,Swagger登场

    基于 abp vNext 和 .NET Core 开发博客项目 - 完善与美化,Swagger登场 转载于:https://github.com/Meowv/Blog.git 在程序员界,总有一批强迫 ...

  6. 在 ABP vNext 中编写仓储单元测试的问题一则

    一.问题 新项目是基于 ABP vNext 框架进行开发的,所以我要求为每层编写单元测试.在同事为某个仓储编写单元测试的时候,发现了一个奇怪的问题.他的对某个聚合根的 A 字段进行了更新,随后对某个导 ...

  7. 基于 abp vNext 和 .NET Core 开发博客项目 - Blazor 实战系列(九)

    基于 abp vNext 和 .NET Core 开发博客项目 - Blazor 实战系列(九) 转载于:https://github.com/Meowv/Blog 终于要接近尾声了,上一篇基本上将文 ...

  8. 基于 abp vNext 和 .NET Core 开发博客项目 - Blazor 实战系列(八)

    基于 abp vNext 和 .NET Core 开发博客项目 - Blazor 实战系列(八) 转载于:https://github.com/Meowv/Blog 上一篇完成了标签模块和友情链接模块 ...

  9. 基于 abp vNext 和 .NET Core 开发博客项目 - Blazor 实战系列(六)

    基于 abp vNext 和 .NET Core 开发博客项目 - Blazor 实战系列(六) 转载于:https://github.com/Meowv/Blog 上一篇完成了博客文章详情页面的数据 ...

最新文章

  1. HTTP状态码对照表(全部状态_建议收藏)
  2. md /mdd /ml /mt/mtd
  3. 11月12号 用户登录输入密码错误达到指定次数后,锁定账户 004
  4. html图片分四面切割播,CSS3切割轮播图
  5. c++读取.dat文件_Python之旅,Day5 - 文件操作
  6. linux搜索命令有哪些,linux五大搜索命令学习
  7. 体重 年龄 性别 身高 预测鞋码_计算体重指数时,需要以下()数据。A.性别B.年龄C.身高D.体重...
  8. 数据驱动在链家网搜索优化与推荐策略中的实践
  9. 微型计算机外文文献,单片机外文文献翻译---微型计算机控制系统
  10. oracle ocp认证指南,OCP认证考试指南(三):创建Oracle数据库
  11. 批量生成独一无二的NFT猫猫图,这项目王多鱼会投吗?
  12. Houdini 求中点,点连成线
  13. 【C语言】一文带你简单了解C语言
  14. 华三 h3c isis协议综合配置
  15. Python小学生课程学哪些内容?
  16. php 新手二维码生成
  17. 四种人适合一起创业,三种人绝对不能合伙
  18. controll层跳转页面_js 控制页面跳转的5种方法
  19. 关于神经网络训练的一些技巧NN Tricks
  20. 【CenterNet】模型文件resnet101-5d3b4d8f.pth下载

热门文章

  1. 分析Java未来几年的发展前景
  2. 如何才能打造优秀高效的项目团队?
  3. 什么是IPQC(制程控制)?
  4. 《菅销在移动互联网时代》智慧树知到章节测试答案
  5. 【论文分享】用于中文零代词解析的带有配对损失的分层注意力网络
  6. 电脑配件 - 如何检测分析电脑的性能指标 - 学习/实践
  7. 数据大牛都在啃的15本书
  8. 程序员,本周上新好书在等你
  9. 国内外云主机服务对比
  10. 强大的JSON格式化和编辑工具zjson