前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >读完《实现领域驱动设计》的四点思考

读完《实现领域驱动设计》的四点思考

作者头像
needrunning
发布2022-11-18 17:09:01
2420
发布2022-11-18 17:09:01
举报
文章被收录于专栏:图南科技图南科技

本文是一篇技术文,结合《实现领域驱动设计》和以往的系统开发经验,

重点解释了业务分析过程中的领域,子域,命令模型和查询模型几个概念。

适合有一定经验的软件开发者和产品经理阅读。

相关概念理解,如有不妥,欢迎指正交流。

一 转变开发者思维方式

面向领域的驱动设计,简称 DDD ,下文中用 DDD替代

基于纯粹属性的思考是以数据为中心的数据模型,以属性为中心,关注的是数据的存储,层次之间的传递方式。

以行为事件思考是以领域和业务价值为中心。行为事件,关注的是场景,闭环和对于业务解决能力的支持。

往往很多程序员在开完需求分析会之后,具体功能的实现就已经心里有谱了,数据存储,层次划分也已然明了。

如果这时候,能够综合场景,业务上客户的业务闭环来思考,就接近于 DDD 的设计思想了。

01 区分属性和行为

领域建模时,考虑什么样的对象做什么样的事情,通过对象行为的命名来体现业务含义。

02 关注业务价值

在 Scrum 开发模型中,对待定项目 backlog item 的评估就是基于业务价值来判断

关注 领域对象/业务对象 对于领域概念/业务概念的表达力。

关注点对应于软件开发中的 关注点分离

之前的一篇随笔,请移步 从业务功能复用演化为业务模式的复用

二 领域和子域

领域是一个组织需要做的事,包括业务范畴和做事方式。

01 边界

DDD 在设计中会不断的强调边界,领域就是这个边界内要解决的问题域。

而核心思想是在于划分领域边界从而来解耦。

我认为领域模型才是 DDD 在微服务设计的关键,只有构建了边界清晰的领域模型的边界,才有可能设计出高质量的微服务。领域和子域实际业务中,是比较难划分的。

在微服务设计时不能脱离领域模型来谈微服务。

以下表格是两个具体的领域以及需要做的事。

界限上下文可以理解为组件

在一个界限上下文/组件/系统中,每一个术语应该仅表示一种领域概念。

像电商系统的顾客,平时所说的系统用户,都是不清晰的概念。应该更加具体和细化,比如 B 端客户,C 端客户。B 端客户又可以分为合作供应商,消费者客户。诸如此类的划分细化。

三 CQRS(命令查询职责分离)

CORS 是 DDD 架构模式中的概念。

对于 Model 的理解,通过定义不同的业务模型,如下图所示,用不同的 Model 区别具体的动作和实体。

下图是以优惠券页面查询这个功能点为例,帮助读者识别请求模型和信息模型。

业务模型对应到技术上来讲是对象。

  • 命令(Command)

在对象层面,如果一个方法修改了,该方法便是一个命令(Command),不应该返回数据。通常是返回成功与否。命令最终是一个写操作

  • 查询 (Query)

如果一个方法返回了数据,方法便是一个查询 (Query),这样的方法,在代码中会以返回的数据类型进行声明。查询最终是一个读操作

下图是一张请求体,看实际中的模型命名例子,这样定义模型的方式,就是向 DDD 设计思路靠拢。

用业务域整体的概念思考业务模型

数据有两种类型:

  1. 状态:状态指你此刻看到的东西,比如说写在银行存折上的余额。
  2. 事件:事件是修改每个状态的动作,例如银行存折上的每一条交易记录。

可以思考,状态和事件在程序中如何区别。

四 反腐层

写到这里,想到一句话

计算机系统之间,如果要进行信息传递,没有通过增加一层服务解决不了的问题

这个服务就是反腐层。负责独立于系统之间,进行信息传递的服务。

DDD 中的说法,一个领域中,如果需要使用其它领域的信息,可以通过 AC 进行防腐和转义。

这样减少原有系统的侵入和修改。适用于系统重构,依赖中间件升级等场景。

总结

在技术团队中 DDD 思想的落地困难重重,设计不一定追求完全一致,更多的是逐步演化靠近。

大到一个系统的拆分,小到业务模型的定义实现。

反复琢磨,是提高业务系统的设计能力的有效方法。

end 2022 年 8 月 与北京

认识我

互联网技术人,公众号|视频号「图南日晟」主理人

擅长中小企业 技术服务,软件解决方案落地

致力于用技术能力为企业解决实际问题

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2022-08-28,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 图南科技 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 一 转变开发者思维方式
    • 01 区分属性和行为
      • 02 关注业务价值
      • 二 领域和子域
        • 01 边界
        • 三 CQRS(命令查询职责分离)
        • 四 反腐层
        • 总结
        • 认识我
        相关产品与服务
        消息队列 TDMQ
        消息队列 TDMQ (Tencent Distributed Message Queue)是腾讯基于 Apache Pulsar 自研的一个云原生消息中间件系列,其中包含兼容Pulsar、RabbitMQ、RocketMQ 等协议的消息队列子产品,得益于其底层计算与存储分离的架构,TDMQ 具备良好的弹性伸缩以及故障恢复能力。
        领券
        问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档