浅析DDD——领域驱动设计的理解

  • 我觉得领域驱动设计概念的提出,是为了更清晰的区分边界。这里的边界包括业务边界和功能的边界,每个边界都包含具体的领域对象,当业务和功能的领域对象一一对应上之后,业务的变化就能很清晰的反馈到功能实现上,到这里就做到了业务架构驱动了技术架构的发展。
  • DDD是一个概念性很强的东西,理解起来有点绕。为了方便对这一概念的理解,DDD引入了一些专有的词汇,我用订单系统配合解释说明一下:
    • 领域:用来划分区域范围,一个领域对应着一系列问题(例如订单系统本身就可以作为一个领域,用来解决支付问题)
    • 子域:领域的进一步拆分,将领域拆分成更细的子域(例如订单系统可以拆分成订单、支付、积分、退款、优惠等),子域按照职责可以划分为核心域、共享域、支撑域:
      • 核心域:一般是项目的亮点功能或核心重要功能,核心域一般需要投入更多的资源。核心域在不同的环境中的定义可能会有所区别(例如对于BI分析系统来说订单是核心域,对于策略系统来说优惠是核心域)
      • 共享域:指的是多个子域共享的域(例如权限认证、用户登陆等)
      • 支撑域:非关键的域(例如字典、展示效果计算等)
    • 语义:指的是领域对象的叫法。这个概念我详细说明一下,一个项目的落地需要很多角色,包括产品经理、项目经理、架构师、研发、测试、运维、运营等角色,每一个角色对一个事物都有自己的角度和认知。不同角色之间对功能产品的交流会花费更多的精力,但还是有可能造成信息传递的不一致。语义就是为了解决这个问题而提出的,首先各个角色坐在一起进行产品的沟通,沟通过程中会划分出不同的领域,然后从领域中提取领域对象并对其进行命名,大家一同定义出来的对象名称,就会作为标准的语义存在。
    • 边界:不考虑功能拆分粒度对实际业务的影响,一般一个边界就是一个单独的功能对外进行服务。这里有一个特殊点:定义语意的前提是边界明确。这个概念很好理解,例如一部手机,它出工厂之后的语义是产品、它在运输车上的语义是货物。

浅析DDD——领域驱动设计的理解的更多相关文章

  1. DDD领域驱动设计的理解

    DDD领域驱动设计的理解 从遇到问题开始 当人们要做一个软件系统时,一般总是因为遇到了什么问题,然后希望通过一个软件系统来解决. 比如,我是一家企业,然后我觉得我现在线下销售自己的产品还不够,我希望能 ...

  2. 浅谈我对DDD领域驱动设计的理解

    从遇到问题开始 当人们要做一个软件系统时,一般总是因为遇到了什么问题,然后希望通过一个软件系统来解决. 比如,我是一家企业,然后我觉得我现在线下销售自己的产品还不够,我希望能够在线上也能销售自己的产品 ...

  3. (转载)浅谈我对DDD领域驱动设计的理解

    原文地址:http://www.cnblogs.com/netfocus/p/5548025.html 从遇到问题开始 当人们要做一个软件系统时,一般总是因为遇到了什么问题,然后希望通过一个软件系统来 ...

  4. DDD 领域驱动设计-商品建模之路

    最近在做电商业务中,有关商品业务改版的一些东西,后端的架构设计采用现在很流行的微服务,有关微服务的简单概念: 微服务是一种架构风格,一个大型复杂软件应用由一个或多个微服务组成.系统中的各个微服务可被独 ...

  5. IDDD 实现领域驱动设计-理解限界上下文

    上一篇:<IDDD 实现领域驱动设计-理解领域和子域> <实现领域驱动设计>前两章内容,基本上读完了,和<领域驱动设计>不同的是,它把很多的概念都放在前面进行讲述了 ...

  6. DDD 领域驱动设计-谈谈 Repository、IUnitOfWork 和 IDbContext 的实践(1)

    好久没写 DDD 领域驱动设计相关的文章了,嘎嘎!!! 这几天在开发一个新的项目,虽然不是基于领域驱动设计的,但我想把 DDD 架构设计的一些东西运用在上面,但发现了很多问题,这些在之前的短消息项目中 ...

  7. DDD 领域驱动设计-“臆想”中的实体和值对象

    其他博文: DDD 领域驱动设计-三个问题思考实体和值对象 DDD 领域驱动设计-三个问题思考实体和值对象(续) 以下内容属于博主"臆想",如有不当,请别当真. 扯淡开始: 诺兰的 ...

  8. DDD 领域驱动设计-三个问题思考实体和值对象(续)

    上一篇:DDD 领域驱动设计-三个问题思考实体和值对象 说实话,整理现在这一篇博文的想法,在上一篇发布出来的时候就有了,但到现在才动起笔来,而且写之前又反复读了上一篇博文的内容及评论,然后去收集资料, ...

  9. DDD 领域驱动设计-三个问题思考实体和值对象

    消息场景:用户 A 发送一个消息给用户 B,用户 B 回复一个消息给用户 A... 现有设计:消息设计为实体并为聚合根,发件人.收件人设计为值对象. 三个问题: 实体最重要的特性是什么? Messag ...

随机推荐

  1. java 实现快速排序

    package leetcode;public class Singleton { public static void sort(int[] array,int low,int high){ int ...

  2. 滑动窗口解决最小子串问题 leetcode3. Longest Substring Without Repeating Characters

    问题描述: Given a string, find the length of the longest substring without repeating characters. Example ...

  3. 主成分分析 | Principal Components Analysis | PCA

    理论 仅仅使用基本的线性代数知识,就可以推导出一种简单的机器学习算法,主成分分析(Principal Components Analysis, PCA). 假设有 $m$ 个点的集合:$\left\{ ...

  4. SpringMVC请求映射handler源码解读

    请求映射源码 首先看一张请求完整流转图(这里感谢博客园上这位大神的图,博客地址我忘记了): 前台发送给后台的访问请求是如何找到对应的控制器映射并执行后续的后台操作呢,其核心为DispatcherSer ...

  5. 都在讲Redis主从复制原理,我来讲实践总结

    摘要:本文将演示主从复制如何配置.实现以及实现原理,Redis主从复制三大策略,全量复制.部分复制和立即复制. 本文分享自华为云社区<Redis主从复制实践总结>,原文作者:A梦多啦A . ...

  6. python登陆界面尝试

    示例1: """ 编写一个程序 用户可以输入用户名和密码 用户有三次机会 登录成功可以进行相应的操作 输入Q退出系统 """ name_li ...

  7. Kubernetes中Deployment部署故障排除

    Kubernetes中Deployment部署故障排除 字符型思维导图 排查pod状态(带标签):kubectl get pods,是否有等待处理的pod? 是?kubectl describe po ...

  8. 生产中常用的du命令

    1. 介绍 du是用来查看文件或目录所占用磁盘空间的大小 du [-abcDhHklmsSx] [-L <符号连接>][-X <文件>][--block-size][--exc ...

  9. HTML5新增语法

    ##1.video1.简化版写法:兼容性差```<video src="" controls> </video>``` 2.视频标签标准语法(兼容处理)`` ...

  10. Markdown部分用法总结

    1.Markdown数学公式&符号 2.Cmd Markdown 公式指导手册