ABP Framework 研习社经验总结(6.28-7.2)
ABP Framework 研习社经验总结(6.28-7.2)
研习社初衷
在翻译 《实现领域驱动设计》—— 基于 ABP Framework 实现领域驱动设计实用指南 时,因为DDD理论和实践的宽泛性,不同公司、不同行业、不同项目实现程度不同,觉得有必要为 ABP Framework 开发者提供一个良好的沟通、交流平台。
建群时间:2021.6.23 专注 ABP Framework 技术讨论、经验交流、资料共享!ABP Framework 研习社(QQ群:726299208) 欢迎更多的朋友加入,共同学习、共同成长!
十天回顾
首位成员:忘忧草 让人难忘!

截止到今日(7.2),10天时间,群里共入住182位小伙伴。

群里小伙伴,开发年限长,平时不闲聊,遇到感兴趣的话题,也会引发刷屏式的讨论。
入住大神级人物,@张善友(dotnet跨平台公众号作者,感谢文章推荐!) @角落的白板(52ABP框架作者)。
很多ABP元老级玩家,@娇龙(16年开始使用) @野鬼(15年开始用) @黑羽(在0.n版本时开始用)。
或许还潜伏着更多低调的高手,未被发现!
研习社经验总结(6.28-7.2)
总结和提取 ABP Framework 研习社 大家讨论活跃的话题、关注度比较高的内容,供各位学习、交流!
问题1:关于ABP版本
by@失意忆的誓言 15:21:50
现在是研究abp还是abp vnext
发现大家在沟通过程中对于ABP新旧版本存在不统一,所以觉得有必要梳理下ABP的版本。
简单回顾ABP的发展历史:
ASP .NET 时代

ASP .NET Boilerplate Project,简称ABP,是第一代开源框架。
ASP .NET Zero是基于 ASP .NET Boilerplate 框架的通用(模板)解决方案。付费商业版。
ASP .NET Core 时代
.NET Core 时代来临,ABP开发者考虑下一代版本的开发,开发代号Abp vNext,为了和第一代开源框架区分,这样命名很好理解,因为 .Net Core 之前也称为 .Net vnext 意为:下一代版本。
随着版本的逐步完善,个人感觉 ABP开发者的平台化战略越来越清晰,首先有一个统一平台 ABP.IO ,包括:文档、框架、社区、支持及商业服务,这不仅仅是一个官方网站,我们可以看到官方更大的愿景,围绕 ABP Framework 打造开发者生态,比如:插件商店也在未来的开发计划当中。
ABP.IO 平台之下,最核心是:开源框架 ABP Framework 和 商业版 ABP Commercial 。
这与 ASP.NET 时代下的 ASP.NET Boilerplate Project 和 ASP.NET Zero 相对应。
最新版ABP,准确地应该称之为 ABP Framwork 。
ABP历史小结
- ASP.NET 时代
- ASP.NET Boilerplate Project 开源框架
- ASP.NET Zero 商业版
- ASP.NET Core 时代
- Abp vNext 前身
- ABP.IO 平台
- ABP Framework 开源框架
- ABP Commercial 商业版
问题2:关于DDD和三层架构区别
问题:三层架构和DDD究竟有什么不一样?
最大的区别在于设计思想的不同:DDD以领域为中心;三层以数据库为中心。一个是领域驱动;一个是数据驱动。DDD使用领域对象封装和实现需求的复杂性,领域可以复用;三层架构基于数据库建模,常规操作为:CRUD。

问题3:ObjectMapper是不是和领域服务有些冲突?
问题 by@黑羽:因为有了自动映射会导致可能不走构造函数,进而导致不走领域模型的构造函数中的业务逻辑?
@黑羽:我现在就是觉得 mapper违背一些规则。一开始觉得还行,后来觉得很不好用。
自动映射常用在领域服务中,接收参数,将 (输入)数据传输对象 转换为 领域对象;返回数据,获取 领域对象 转换为 (输出)数据传输对象 。
接收参数转换为领域对象,如果创建领域对象时,需要属性有效性验证,不推荐使用 自动映射,尽管可以通过设置 自动映射规则,不建议将 业务规则 隐藏在自动映射配置中。
因为数据传输对象是一个POCO对象,所以在将 实体 自动映射为 (输出)数据传输对象时,可以放心自动映射。
对象自动映射,不是实施领域驱动必须技术,当做是一个工具,酌情使用即可!
更多最佳实践可以参看:
《基于ABP Framework 实现领域驱动设计》#构件/数据传输对象/对象映射章节
问题4:求 IssueTracking 项目源码
Hager²º20 08:22:55
@iEricLee 群主早上好,看了你的文章,质量很高呀。提到的项目IssueTracking,有没有可能给分享一份,具体的学习学习。
失意忆的誓言 08:28:15
那有没有最佳实现方式的demo可以分享一下呢,麻雀虽小五脏俱全的那种
@Hager²º20 如果能有一个示例项目结合文章细品就更好了
DDD这玩意儿,就是一种设计思想,可具体落地时有时候就感觉无从下手。
这里统一做一个回复:IssueTracking 是一个虚拟项目,主要用来模拟业务场景和需求的演变,目前没有与文章中相对应的单独项目。
如果大家想研究DDD落地后的项目示例,其实在 ABP Framework 源码中提供很多应用模块,这些应用模块都是遵循DDD最佳实践和原则,挑自己感兴趣的模块研究即可。
推荐最新发布的 CMS-Kit 模块:传送门:Github 源码 。
问题5:关于应用层分层问题
问题:by@听她说。 它后面说可以多个application层来对应多个不同的业务场景 你能做个案例出来不
在解决方案中可以添加 Admin.Application Public.Application Common.Application 应用层,共用领域层。应用层分别对应管理后台业务逻辑、前台业务逻辑、公共业务逻辑的处理,对应用层进行拆分可以让项目结构更加清晰、可控。
由此也带来开发商的便利,比如因为对后台管理单独分层权限控制更加方便。
另外还可以按照不同客户端来分层,比如:Mobile.Application WeChat.Application Tablet.Application 来拆分应用层,处理不用客户端的业务需求,所以应用层在分层上可以灵活的,只需要遵循DDD基本原则都是DDD最佳实践!
问题6:关于自定义身份验证
by@ 听她说。 17:45:10
大家好,使用 abp vnext ,ids4,我想给用户添加一个pin密码然后使用pin密码登录,获取accesstoken,这样能实现吗?
解决方式:
by @Dr.Yao 18:57:43
阔以的。看IExtensionGrantValidator。
问题7:业务编码是在领域模型中生成,还是在应用服务?
by @野鬼:生成业务编码这个。不属于领域服务。在我的概念里面 它是属于 业务服务,ApplicatonService里面,我创建实体。
你必须传一个 单号给我。这个单号是由应用产生的。
我要一个订单号。这订单号怎么生成。不是我领域的事。是你 Application负责的事。
但我领域层会校验这个 单号的唯一性、校验单号的规则 。是否符合我的逻辑。
单号。早就生成好了。而且买现成的。
问题8:关于 ABP Framework的学习建议
问题 by@草叶睡蜢 16:52:59
对于官方文档,到底要怎么看,先看啥后看啥,有没有一个导航图或者思维导图。
我把官方文档下载下来,都是按字母排序的,根本分不清从哪里开始着手。
有经验的给分享一下学习路径。
学习路径建议:
- 先看快速入门的教程 Todo 、BookStore 把项目基础功能运行起来,理解基本流程和架构。
- 然后再逐个框架功能击破。模块众多可以挑自己能用到或感兴趣的分析,最终会发现所有模块其实都有统一的实现思路。
- 最后拿下架构层面内容:领域驱动、微服务、多租户。
电子书下载
个人认为 ABP Framework 技术栈新而全,是.NET开发者的“屠龙刀”、“宝藏库”。从代码、项目、解决方案、技术架构,都有优雅的设计和实现,对于初中级.NET程序员,想要进一步提升自己的编码功力、设计思想、架构经验,学习和应用该框架,绝对是最佳途径之一。
回顾系列文章:
- 基于ABP落地领域驱动设计-01.全景图
- 基于ABP落地领域驱动设计-02.聚合和聚合根的最佳实践和原则
- 基于ABP落地领域驱动设计-03.仓储和规约最佳实践和原则
- 基于ABP落地领域驱动设计-04.领域服务和应用服务的最佳实践和原则
- 基于ABP落地领域驱动设计-05.实体创建和更新最佳实践
- 基于ABP落地领域驱动设计-06.正确区分领域逻辑和应用逻辑
为了大家方便阅读,整理成了电子书《基于ABP Framework 实现领域驱动设计》中文完整版_v1.0_iEricLee译 点击下载。
dotNET兄弟会-公众号
专注.Net开源技术及跨平台开发!致力于构建完善的.Net开放技术文库!为.Net爱好者提供学习交流家园!

ABP Framework 研习社经验总结(6.28-7.2)的更多相关文章
- ABP Framework 为什么好上手,不好深入?探讨最佳学习姿势!
离写上一篇经验总结 ABP Framework 研习社经验总结(6.28-7.2) ,已经过去两周. ABP Framework 研习社(QQ群:726299208) 最近一周,又迎来了很多新伙伴,成 ...
- ABP Framework V4.4 RC 新增功能介绍
目录 新增功能概述 启动模板删除 EntityFrameworkCore.DbMigrations 项目 CMS-Kit 动态菜单管理 Razor引擎对文本模板的支持 DbContext/Entiti ...
- ABP Framework:移除 EF Core Migrations 项目,统一数据上下文
原文:Unifying DbContexts for EF Core / Removing the EF Core Migrations Project 目录 导读:软件开发的一切都需要平衡 动机 警 ...
- ABP Framework 5.0 RC.1 新特性和变更说明
.Net 6.0 发布之后,ABP Framework 也在第一时间进行了升级,并在一个多星期后(2021-11-16)发布了 5.0 RC.1 ,新功能和重要变更基本已经确定. 5.0版本新特性 新 ...
- ABP Framework 5.2 RC 发布及新增功能介绍
ABP Framework 5.2 RC 新增功能 目录 ABP Framework 5.2 RC 新增功能 单层解决方案模板 EF Core 数据库迁移 UI 和 数据库 选项 API 版本控制 源 ...
- ABP Framework 5.3.0 版本新增功能和变更说明
ABP Framework 5.3.0 稳定版已在2022年6月14日正式发布. 以下是本版本的新增功能: "开始"页面提供创建单层项目选项 启动模板提供 PWA 支持 Volo. ...
- Aspect Oriented Programming using Interceptors within Castle Windsor and ABP Framework AOP
http://www.codeproject.com/Articles/1080517/Aspect-Oriented-Programming-using-Interceptors-wit Downl ...
- 《ABP Framework 极速开发》教程首发
写在发布之前 有没有小伙伴跟我刚开始接触 ABP Framework 的感觉一样"一看文档深似海",看完文档之后,想要上手却找不着头绪. 本套教程写作的目的之一是为初学者提供一条相 ...
- 从原理到代码:大牛教你如何用 TensorFlow 亲手搭建一套图像识别模块 | AI 研习社
从原理到代码:大牛教你如何用 TensorFlow 亲手搭建一套图像识别模块 | AI 研习社 PPT链接: https://pan.baidu.com/s/1i5Jrr1N 视频链接: https: ...
随机推荐
- 如何更好理解Peterson算法?
如何更好理解Peterson算法? 1 Peterson算法提出的背景 在我们讲述Peterson算法之间,我们先了解一下Peterson算法提出前的背景(即:在这个算法提出之前,前人们都做了哪些工作 ...
- ES6学习-0 前言
本菜鸟做了二十来年的程序开发了,前后台都写过,队伍也带过.大约是2000年左右,是用dephi 写后台CGI,所有的html,js,css基本都是混在CGI里输出到前台的,那时也没有明确的前后台的概念 ...
- jQuery的入口和jQurey的对象切换
jQuery jQuery的导入 通过script标签的src属性,link标签是导入层叠样式表 jQuery和原生JS的入口函数 1.jQ在页面结构加载完毕就会执行 原生JS的入口函数是等图片.层叠 ...
- git合并代码到主分支
git合并login分支到master分支 1.首先查看源码状态 git status 2.添加到暂存区 git add . git status //添加到暂存区后再次查看源码状态 3.提交代码到本 ...
- 使用UltraISO制作ubuntu安装u盘启动盘图文教程
使用UltraISO制作ubuntu安装u盘启动盘图文教程 胖先森关注 0.9572017.09.07 11:06:15字数 770阅读 27,901 制作U盘启动1.gif 1.首先打开Ultr ...
- Linux命令学习—— fdisk -l 查看硬盘及分区信息
Linux命令学习(3)-- fdisk -l 查看硬盘及分区信息注意:在使用fdisk命令时要加上sudo命令,否则什么也不能输出linux fdisk 命令和df区别是什么? fdisk工具是分区 ...
- 串口1配合DMA接收不定长数据(空闲中断+DMA接收)
1.空闲中断和别的接收完成(一个字节)中断,发送完成(发送寄存器控)中断的一样是串口中断: 2.空闲中断是接收到一个数据以后,接收停顿超过一字节时间 认为桢收完,总线空闲中断是在检测到在接收数据后, ...
- kind:Kubernetes in Docker,单机测试 Kubernetes 群集的最佳方案
请访问原文发布链接:https://sysin.org/article/kind/,查看最新版. 作者:gc(at)sysin.org,主页:www.sysin.org 2021.04.28 更新,k ...
- CoSky-Mirror 就像一个镜子放在 Nacos、CoSky 中间,构建一个统一的服务发现平台
CoSky 基于 Redis 的服务治理平台(服务注册/发现 & 配置中心) Consul + Sky = CoSky CoSky 是一个轻量级.低成本的服务注册.服务发现. 配置服务 SDK ...
- 【Azure Developer】使用 Python SDK连接Azure Storage Account, 计算Blob大小代码示例
问题描述 在微软云环境中,使用python SDK连接存储账号(Storage Account)需要计算Blob大小?虽然Azure提供了一个专用工具Azure Storage Explorer可以统 ...
