案例教你一步步设计DDD微服务项目,2024年最新面试如何学

先自我介绍一下,小编浙江大学毕业,去过华为、字节跳动等大厂,目前阿里P7

深知大多数程序员,想要提升技能,往往是自己摸索成长,但自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

因此收集整理了一份《2024年最新Java开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友。
img
img
img
img
img
img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上Java开发知识点,真正体系化!

由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新

如果你需要这些资料,可以添加V获取:vip1024b (备注Java)
img

正文

最后审批人完成审批。

  • 完成审批后,产生请假审批已通过领域事件。后续有两个进一步的业务操作:发送请假审批已通过的通知,通知邮件系统告知请假人;将请假数据发送到考勤以便核销

人员组织关系场景分析结果图


3 领域建模

=====================================================================

通过对业务和问题域进行分析,建立领域模型。向上通过限界上下文指导微服务边界设计,向下通过聚合指导实体对象设计。

3.1 领域建模过程


3.1.1 找出领域实体和值对象等领域对象

根据场景分析,分析并找出发起或产生这些命令或领域事件的实体和值对象,将与实体或值对象有关的命令和事件聚集到实体。

分析后的实体与命令的关系:请假单、审批意见、审批规则、人员、组织关系、刷卡明细、考勤明细以及考勤统计等实体和值对象

找出聚合根

根据实体、值对象与聚合根的依赖关系,建立聚合。

定义聚合前,先找出聚合根。

  • 从实体中可找出“请假单”、“人员”聚合根

再找出与聚合根紧密依赖的实体和值对象,会发现

请假单下的

  • 审批意见

  • 审批规则

人员下的

  • 组织关系

但之后发现刷卡明细、考勤明细和考勤统计等实体没有聚合根。

这类就需要分情况处理。

刷卡明细、考勤明细和考勤统计等实体间相互独立,找不出聚合根,不是富领域模型,但它们一起完成考勤业务逻辑,具有高业务内聚性。考虑将这几个业务关联紧密的实体,放在一个考勤聚合内。

最终建立请假、人员组织关系和考勤聚合:

  • 请假聚合有请假单、审批意见实体和审批规则等值对象

  • 人员组织关系聚合有人员和组织关系等实体

  • 考勤聚合有刷卡明细、考勤明细和考勤统计等实体

定义限界上下文

人员组织关系和请假,两个聚合共同完成请假业务,所以在请假限界上下文。

考勤聚合单独构成考勤统计限界上下文。

所以为业务划分请假和考勤统计两个限界上下文,建立请假和考勤两个领域模型。

微服务的拆分

=====================================================================

一般来说,一个限界上下文即可设计为一个微服务。

划分微服务主要考虑职责单一原则。根据限界上下文即可拆为请假和考勤两个微服务:

  • 请假微服务包含人员组织关系和请假两个聚合

  • 考勤微服务包含考勤聚合

战略设计结束。通过战略设计建立了领域模型,划分了微服务边界。

下一步战术设计了,即微服务设计。

战术设计

===================================================================

根据领域模型进行微服务设计的过程。

梳理微服务内的领域对象,梳理领域对象之间的关系,确定它们在代码模型和分层架构中的位置,建立领域模型与微服务模型的映射关系,以及服务之间的依赖关系。

战术设计包括如下阶段:

分析微服务领域对象


领域模型有很多领域对象,但这些对象带有比较重的业务属性。

微服务内应该有哪些服务?服务的分层?应用服务由哪些服务组合和编排完成?领域服务包括哪些实体和实体方法?哪个实体是聚合根?实体有哪些属性和方法?哪些对象应该设计为值对象等。

服务的识别和设计


可将命令作为服务识别和设计的起点,步骤如下:

  • 根据命令设计应用服务,确定应用服务的功能,服务集合,组合和编排方式。服务集合中的服务包括领域服务或其它微服务的应用服务

  • 根据应用服务功能要求设计领域服务,定义领域服务。这里需要注意:应用服务可能是由多个聚合的领域服务组合而成的

  • 根据领域服务的功能,确定领域服务内的实体以及功能

  • 设计实体基本属性和方法

考虑领域事件的异步化处理。

以提交审批为例,流程:

  • 根据请假类型和时长,查询请假审批规则,获取下一步审批人的角色

  • 根据审批角色从人员组织关系中查询下一审批人

  • 为请假单分配审批人,并将审批规则保存至请假单

  • 分析得需要在应用层和领域层设计以下服务和方法

  • 应用层

提交审批应用服务。

  • 领域层

领域服务有查询审批规则、修改请假流程信息服务、根据审批规则查询审批人服务,分别位于请假和人员组织关系聚合。

请假单实体有修改请假流程信息方法,审批规则值对象有查询审批规则方法。

人员实体有根据审批规则查询审批人方法

聚合中的对象

=====================================================================

请假聚合中,聚合根是请假单。

请假单经多级审批后,会产生多条审批意见,为方便查询,可将审批意见设计为实体。

请假审批通过后,会产生请假审批通过的领域事件,因此还会有请假事件实体。

请假聚合有如下实体:

  • 审批意见(审批人、审批状态和审批意见)

  • 请假事件实体

请假单聚合的值对象。请假人和下一审批人数据来源于人员组织关系聚合中的人员实体,可设计为值对象。

人员类型、请假类型和审批状态是枚举类型,可设为值对象。

确定请假审批规则后,审批规则也可作为请假单的值对象。请假单聚合将包含以下值对象:请假人、人员类型、请假类型、下一审批人、审批状态和审批规则。

  • 请假聚合对象关系图

人员组织关系聚合中,可建立人员之间的组织关系,通过组织关系类型找到上级审批领导。

  • 聚合根

人员

  • 实体

组织关系(包括组织关系类型和上级审批领导),其中组织关系类型(如项目经理、处长、总经理等)是值对象。上级审批领导来源于人员聚合根,可设计为值对象

人员组织关系聚合包含以下值对象

  • 组织关系类型

  • 上级审批领导

最后的话

无论是哪家公司,都很重视Spring框架技术,重视基础,所以千万别小看任何知识。面试是一个双向选择的过程,不要抱着畏惧的心态去面试,不利于自己的发挥。
同时看中的应该不止薪资,还要看你是不是真的喜欢这家公司,好了希望这篇文章对大家有帮助!

部分截图:
在这里插入图片描述

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化的资料的朋友,可以添加V获取:vip1024b (备注Java)
img

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

不是真的喜欢这家公司,好了希望这篇文章对大家有帮助!**

部分截图:
[外链图片转存中…(img-Q6ysJ5Gc-1713714876183)]

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化的资料的朋友,可以添加V获取:vip1024b (备注Java)
[外链图片转存中…(img-ETtkopyf-1713714876184)]

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值