杨中科-.NET下 DDD落地实战-直播课问答回顾

122 阅读5分钟

4月9日直播回顾:

4月9日晚,**微软.NET20周年特别活动 - 云原生挑战赛的直播课第二轮,**迎来了全网30万粉丝的——杨中科老师,杨老师是.NET界的技术传播者,其技术视频通俗易懂,是众多技术初学者的福音。

杨中科是微软的MVP,曾就职于微软中国金蝶软件等知名公司,同时也是传智播客联合创始人、如鹏网创始人;创办了为计算机初学者提供学习指导的公益性网如鹏网,撰写的大量的学习方法,《C语言也能干大事》等视频教程帮助无数的计算机初学者走出迷茫。并著有**《零基础趣学C语言》、《自己动手写开发工具》、《J2EE开发全程实录》等书籍,并将于2022年5月出《ASP.NET Core 内幕与项目实战》**。

杨老师在4月9日的直播课主题是:.NET下DDD落地实战。并同步直播在微软Reactor51AspxCSDN思否Bilibili等平台,数千开发者在线观看,并踊跃互动。

此节直播课,杨老师分析解剖讲解了.NET下DDD落地实战,从分析聚合,到如何通过事务脚本处理“事件”,以及提出充血模式贫血模式等思维概念为大家从更通俗的角度去理解DDD。错过直播的朋友继续看完全文,观看课程回放视频以及杨老师的群内答疑文字整理

杨老师的课程回放可以关注 51Aspx 视频号进行观看

我们也将课程发布在51Aspx平台、腾讯课堂、微博Bilibili、知乎、百家号等平台,方便大家选择观看。

以下是杨中科老师针对直播现场提问做的解答。

Q1:Efcore支持所有数据库吗?

Efcore,国际上流行的主要这个数据库啊,那像这个SQL不用说了,MySQL、Oracle、PostgrcSQL都支持,国产的这个达梦也支持,但是其他的一些国产的一些,其他的一些国产的小数据库吧,就支持不太好了,像人大金仓之类的就支持不是太好。

Q2:充血模型和工厂方法有什么不同?

他们两个是两个层面的东西,这个工厂方法你只是说比如说创建一个reporter的时候,我可以通过工厂方法,我创建一个东西的时候,通过工厂方法,这个他们两个不是一个层面的东西。

Q3:充血模型中应该有持久化的逻辑吗?

充血模型中不可能有持久化,逻辑持久化逻辑是体现在仓储中的充血模型,只体现内存中的数据的变化,由这个仓储来负责把它持久化到数据库里边。

Q4:业务事件以处理队列的方式实现的话,现在只能以单线程处理,不然会存在后触发的事件会比先触发的事件消费,有没有好的方案?

这个分两个层面儿去讲啊,第一个尽可能你要把你的系统业务流程设计的是——不应该由于这个事件的消费顺序,而影响你数据的正确性;当然这个对于设计的要求是比较高的,但是这样做的好处是系统更加灵活,性能更加的高,这是最好的情况;当然如果说你的设计达不到这样一个条件的话,可是退而求其次一种方式继续保持,你现在单行线程这种处理方式,如果也没什么不好的话,那就这么做也没什么不好,但是如果说这个有并发性能这种问题呢,那你可以采用机制,比如在把这个消息通过一个编号,扔到一个队列的方式来保证他们的这个顺序就可以了。

Q5:仓储层和领域层之间的关系,基础设施层可以写持久化逻辑吗?

领域层是对于内存中的数据做修改,仓储层是把这个经过千般蹂躏修改之后的这个实体内存中的实体的对象保存到数据库中,这是他们两个各各司其职;然后基础层中可以写持久化的逻辑,但不应该有业务逻辑,只能有一些和业务逻辑无关的代码。咱说说通俗一点儿,咱们可以把EFcore框架就当成一个基础设施层。这个业务框架它肯定不和业务逻辑相关,他只是把你的这个,你的这个实体状态保怎么保存到数据库中,有这样一个东西;所以说基础设施层中可以有持久化的逻辑,而且必须得有持久化逻辑,但是不应该是由业务相关的持久化的逻辑。

Q6;应用从缓存中取出数据,缓存没有的话从仓储中取出数据,这个缓存的逻辑是做在仓储层吗,或者说仓储层应不应该包含了缓存的这个逻辑?

缓存我认为应该是放到应用层,因为有的模块需要缓存,有的地方不需要缓存,如果把它放到这个其他层的话,就会导致代码出现很多问题。所以说我还是建议把这个缓存放到应用层,因为它是属于应用层的一个东西。如果属于业务逻辑的缓存,你可以放到别的层,但是我在想缓存想不到他应该做业务,业务逻辑它都属于一个应用层的东西,所以说放到这个应用层上就可以。

大赛详细介绍

club.51aspx.com/netscec/

第三场直播课预告:

时间:4月14日 晚19:30-20:30

课题:构建你的.NET云原生开发环境

关注“51Aspx 视频号”