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 源码[1] 。

问题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 对于官方文档,到底要怎么看,先看啥后看啥,有没有一个导航图或者思维导图。我把官方文档下载下来,都是按字母排序的,根本分不清从哪里开始着手。有经验的给分享一下学习路径。

学习路径建议:

1.先看快速入门的教程 Todo 、BookStore 把项目基础功能运行起来,理解基本流程和架构。2.然后再逐个框架功能击破。模块众多可以挑自己能用到或感兴趣的分析,最终会发现所有模块其实都有统一的实现思路。3.最后拿下架构层面内容:领域驱动、微服务、多租户。

电子书下载

个人认为 ABP Framework 技术栈新而全,是.NET开发者的“屠龙刀”、“宝藏库”。从代码、项目、解决方案、技术架构,都有优雅的设计和实现,对于初中级.NET程序员,想要进一步提升自己的编码功力设计思想架构经验,学习和应用该框架,绝对是最佳途径之一。

回顾系列文章:

•  基于ABP落地领域驱动设计-01.全景图•  基于ABP落地领域驱动设计-02.聚合和聚合根的最佳实践和原则•  基于ABP落地领域驱动设计-03.仓储和规约最佳实践和原则•  基于ABP落地领域驱动设计-04.领域服务和应用服务的最佳实践和原则•  基于ABP落地领域驱动设计-05.实体创建和更新最佳实践•  基于ABP落地领域驱动设计-06.正确区分领域逻辑和应用逻辑

为了大家方便阅读,整理成了电子书《基于ABP Framework 实现领域驱动设计》中文完整版_v1.0_iEricLee译 

请入群:ABP Framework 研习社(QQ群:726299208)在共享文件中下载。

References

[1] 传送门:Github 源码: https://github.com/abpframework/abp/tree/dev/modules/cms-kit

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/301112.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

一篇万字长文读懂微软PDB、SourceLink——.net core之nuget 包调试

序言在大前年,为了说服框架组采用Nuget包的形式分发框架类库,我费了老鼻子的劲也没有取得成功,其中最致命的一个问题是,nuget包不能获得源码调试级的支持,在分发和包的管理形式上其比其他方案都优秀。最后折中的选择是…

放弃winform的窗体吧,改用html作界面,桌面应用程序UI的新的开发方式。

做过很多winform项目,都为winform控件头疼不已。想实现一些漂亮的样子总是很难。我这里列举几个缺点: 1.winform控件大多是 绝对布局 ,你需要给出准确的坐标。那么在实现居中效果就会很难。 2.学习成本,也了解各个控件的结构&…

数学建模必备算法模型,全新升级!

转眼间2019年已经过去了四分之一,近日,2019年数学建模国赛的时间也已经出来啦,确定为9月12日(周四)18时至9月15日(周日)20时。随着各种各样的数模比赛源源不断地开展,时不时有小伙伴…

boostrap 鼠标滚轮滑动图片_16种基于Bootstrap的css3图片hover效果

bootstrap-image-hover是一款基于Bootstrap的css3图片hover效果。这组图片hover效果共16种特效。同时该特效也支持非Bootstrap版本。使用方法在页面中引入bootstrap相关文件和FontAwesome字体图标文件以及effects.min.css文件。HTML结构该css3图片hover效果的每一种效果都有它们…

从零开始学C++之STL(七):剩下5种算法代码分析与使用示例(remove 、rotate 、sort、lower_bound、accumulate)...

一、移除性算法 &#xff08;remove&#xff09; C Code 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 // TEMPLATE FUNCTION remove_copy template < class _InIt, class _OutIt, cl…

20 种物体破剖面图,真正的让你脑洞大开

全世界只有3.14 % 的人关注了数据与算法之美有很多东西的内部世界十分复杂&#xff0c;单纯的从表面看难以窥其精锐&#xff0c;今天咱们来看那些被劈成两半展示横截面的东西&#xff1a;1.安全气囊2.打火机3.各种枪械消音器4.集装箱船5.路虎车6.曲棍球头盔7.人类心脏8.数码相机…

你的公司内卷化了吗?

大家看上去都很忙&#xff0c;但就是没结果怎么办&#xff1f;忙有结果都是好的&#xff0c;没有结果都是问题。其实可以从三方面来看这个问题&#xff1a;1、没有正确找到方法大家都在教科书学过一只乌鸦喝水的故事。故事告诉人们遇到困难不要放弃&#xff0c;要运用身边可以利…

每日一笑 | 3 X 4 = ?

全世界只有3.14 % 的人关注了数据与算法之美&#xff08;图源网络&#xff0c;侵权删&#xff09;

堵俊平:开放治理是开源社区的终极之路 | DEV. Together 2021 中国开发者生态峰会...

内容来源&#xff1a;2021 年 6 月 5 日&#xff0c;由 SegmentFault 思否主办的 2021 中国开发者生态峰会圆满落幕。会上&#xff0c;开放原子开源基金会 TOC 主席、华为计算开源总经理堵俊平发表了《开放治理&#xff1a;开源社区的终极之路》的主题演讲。分享嘉宾&#xff1…

每日一笑 | 谷歌能严谨到什么地步?

全世界只有3.14 % 的人关注了数据与算法之美&#xff08;图源网络&#xff0c;侵权删&#xff09;

浏览器的定制与扩展

下载源代码 本文分如下章节&#xff1a; 前言 在MFC中使用浏览器 怎样扩展或定制浏览器 定制鼠标右键弹出出菜单 实现脚本扩展(很重要的external接口) C代码中如何调用网页脚本中的函数 定制消息框的标题 怎样定制、修改浏览器向Web服务器发送的HTTP请求头 怎样修改浏览器标识 …

通过反射实现IOC功能

闲来没事&#xff0c;自己就想着根据反射可以自己写一个简易的IOC组件。IOC组件说白了就是根据反射实例化对应的接口。废话不多说&#xff0c;开始说说我的解决方案。1、项目结构图&#xff1a;IOCTest为web MVC项目。Common 通过配置文件实例化对应的接口IBLL定义的接口BLL实现…

php 分享微博,php微信分享到朋友圈、QQ、朋友、微博

本文实例为大家分享了php微信分享到朋友圈、QQ、朋友、微博的具体代码&#xff0c;供大家参考&#xff0c;具体内容如下前台代码wx.config({debug: false,appId: "{$signPackage[appId]}",timestamp: "{$signPackage[timestamp]}",nonceStr: "{$signP…

如果这个世界都不按套路出牌将会变成怎么样。。。 | 今日最佳

全世界只有3.14 % 的人关注了青少年数学之旅&#xff08;图源网络&#xff0c;侵权删&#xff09;请你有话“直”说↓ ↓ ↓

关于面试,避开这几点,成功几率更大~~~

概述 又是一个大学毕业季&#xff0c;刚好最近几年参与过很多面试&#xff0c;把其中遇到的一些具有“代表性”的面试场景总结出来和小伙伴聊聊&#xff0c;助力小伙伴跳过一些面试大坑(强烈希望)。对于面试&#xff0c;有很多小伙伴认为只是聊技术、聊能力&#xff0c;其实不仅…

脚本语言php是什么意思,php是什么脚本语言

PHP是一种简单的&#xff0c;面向对象的&#xff0c;解释型的&#xff0c;健壮的&#xff0c;安全的&#xff0c;性能非常之高的&#xff0c;独立于架构的&#xff0c;可移植的&#xff0c;动态的脚本语言。PHP具有和JAVA类似的Class关键字。因为不需要虚拟机&#xff0c;以致速…

[IOS地图开发系类]2、位置解码CLGeocoder

2019独角兽企业重金招聘Python工程师标准>>> 接第一步的操作&#xff0c;获取到地址信息经纬度后&#xff0c;我们可以对其进行解码&#xff0c;解码采用的CLGeocoder这个类&#xff0c;使用方式如下&#xff1a; 1、在ViewControlelr.m文件中声明一个CLGeocoder的…

微软相关的开发资源列表(update)

MSDN总站 http://www.msdn.com/MSDN中文站 http://www.microsoft.com/china/msdn/MSDN台湾站http://www.microsoft.com/taiwan/ASP.NET总站 http://www.asp.net/http://www.gotdotnet.com/SQLServerCentral.com is the largest free SQL Server community on the Internet. W…

备战数学建模国赛,快速搞定算法模型!

全世界只有3.14 % 的人关注了青少年数学之旅说到数学建模&#xff0c;大家的第一反应就是国赛、美赛等数学建模比赛&#xff0c;但这只是冰山一角&#xff0c;不过这个反应却也很正常&#xff0c;因为很多小伙伴接触数学建模的契机&#xff0c;大部分还是因为数学建模相关的竞赛…

考虑用Task.WhenAll

异步能在一定场景中带性能的飞跃&#xff0c;同步调用性能&#xff0c;也以带来时间的节省。先看一下被调用的api:using Microsoft.AspNetCore.Mvc; using Microsoft.Extensions.Logging; using System; using System.Collections.Generic; using System.Linq; using System.Th…