单击上面的“ 源代码”,然后选择”
不管她是上一波还是下一波?
暴风雨的海浪是好海浪!
该文章每天在10:33更新,每天都会失去头发...
源代码质量列
在域驱动的设计(DDD)方法用于指导如何建模复杂的业务问题和系统设计。
在此博客中,我们尝试完全介绍使用DDD模型对支付系统进行建模的实践。
支付系统是一个非常复杂且可变的系统,范围从订单,欺诈,通知,集成以及各种付款方式,以资助清算和和解,涵盖广泛的领域。
大多数开发人员在处理复杂系统时可能会遇到一些问题
软件行业中的许多设计模式都可以解决这些问题,因此我们尝试采用域驱动的设计(DDD)方法来建模我们的支付系统以管理系统设计中的复杂性。
后端管理系统 +用户基于boot + plus + vue&支持RBAC动态权限,多租户,数据权限,工作流程,三方登录,付款,SMS,购物中心和其他功能。
项目地址:
域驱动的设计(DDD)是由埃里克(Eric)提出的,埃里克(Eric)是一组想法,原理和模式,可帮助基于业务领域的基本模型设计软件系统。 DDD有两个不同的空间:问题空间和解决方案空间。
在问题空间中,您使用战略模型来定义系统的大规模结构,该结构的重点是分析域,子域和无处不在的语言。
在解决方案空间中,战术模式用于提供一组设计模式,您可以使用这些模式来创建域模型。这些模式包括有限的上下文,上下文映射,实体,聚合,域事件,域服务,应用程序服务和基础架构。这些战术模式将帮助您设计既松散耦合又具有凝聚力的微服务。
基于微服务的思想,项目实践是在B2C电子商务方案中构建的。核心技术堆栈是引导+。将来,它将被重建。
项目地址:
想象一下这样的场景:
将遵循以下步骤,以根据上述情况对DDD进行付款系统进行建模。
以下是分析结果。
付款系统
付款处理:商人可以通过各种付款方式接受客户的付款
财务:清算和结算商人的付款资金。
在与域专家讨论之后,这是所有团队接受的通用语言。
付款意图:商人创建的订单,指定价格,产品,客户等。
付款尝试:商人创建的交易,以接受从客户付款到特定订单。
付款方式:客户支付产品或服务的方式。
付款结算:一批付款定居在商人的钱包上。
付款视图:汇总付款详细信息视图,其中包含与付款有关的所有数据。
有限上下文(BC)定义了域模型的范围。从问题空间的分析结果来看,我们可以定义以下有限的上下文。
付款网关:API网关,为商人提供可靠的API来创建或查看付款。
付款核心:付款意图,尝试和方法资源管理。
付款适配器:与外部PSP(微信//Visa/etc)集成。
付款结算:计算每个付款的原则和费用,并为商人解决。
付款融合:付款细节的总看法。
上下文图看起来像这样:
从上面分析的方案和无处不在的语言中,我们可以确定以下聚合,实体,价值对象和域事件。
在我们的实践中,域服务是按照单个责任模型提供给汇总的无状态业务逻辑服务。通常,我们将域仓库,聚合更改和域事件封装在域服务中。以此为例。
域事件可以使系统更具扩展性并避免任何耦合 - 一个汇总不应确定其他人应该做什么,并且时间耦合 - 成功完成付款并不取决于同时可用的所有过程。
例如,当D将付款状态更改为付费时,发送域事件以通知要捕获的汇总。在域活动处理程序中,我们可以对业务逻辑作出副作用,例如通知付款融合的边界上下文以更新付款详细信息以及付款结算的边界上下文以计算结算金额和费用。
在DDD模型中,基础架构层用于将核心业务领域与技术实施细节区分开。通常,该层采用抗污染层(ACL)模式。以域存储库为例。
域仓库仅定义接口,例如它们可以做的事情,但是实现详细信息应隐藏在基础架构层中,例如使用或保存数据。例如,在基础架构层,它基于具体的实现,Topo是将域对象转换为持久对象的映射器。
因此,在域层面,我们仅关注域模型,该模型完全与基础架构技术完全脱在一起。当基础架构层发生任何变化时,无需在域层中进行更改。
现在,我们已经为支付系统定义了一组有限的上下文,并在每个有限的上下文中确定了一组实体,聚合和域事件服务。
下一步是从域模型转变为应用微服务的设计。
在这里,我们选择将有限的上下文映射到微服务。
在此博客中,我们尝试建模支付系统时涉及域驱动设计(DDD)模型的各种概念和策略。采用DDD可以提供许多好处,例如在所有团队之间进行清晰的沟通,并提供一个成熟的模型来管理复杂性并在设计系统时提供更好的可扩展性。
DDD模型是一个巨大的话题,我认为我们没有足够的做法来完全解释它们,但是我们想介绍一些关键的主题和我们在练习模型方面的经验。将来,我们将继续研究DDD模型中的每个主题,例如图层管理,域事件存储,上下文映射模型等。
欢迎加入我的知识星球,一起讨论架构和交换源代码。要加入,请按以下QR码:
源代码已在知识行星上更新,如下所示:
“ Tao Road 2.x介绍”系列的最新更新已经完成,涵盖了101篇文章,包括ES,图书馆和表格,读写分离,权限,性能测试等。
提供近3W行的代码以及具有超过4W代码的电子商务微服务项目的示例。