浅析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. Android之Parcelable解析

    http://www.cnblogs.com/abinxm/archive/2011/11/16/2250949.html http://www.cnblogs.com/renqingping/arc ...

  2. 让JS代码Level提升的忍者秘籍(实用)

    本文章共2377字,预计阅读时间5-10分钟. 前言 没有前言. 你准备好成为同事眼中深藏不露.高深莫测.阳光帅气的前端开发了吗? 那就开始吧! 本文秉承宗旨:代码实用与逼格并存. 提升JS代码Lev ...

  3. python-给一个参数n,例如3:先输出1,2,3,4,5,6,7,8,9,每三个数后换行,后输出1,4,7,2,5,8,3,6,9

    """ 2 定义一个函数,fn(n)其中n表示输入n行n列的矩阵,需要满足的要求是在n为 3时先输出 3 1 2 3 4 4 5 6 5 7 8 9 6 后输出 7 1 ...

  4. Windows下解析命令行参数

    linux通常使用GNU C提供的函数getopt.getopt_long.getopt_long_only函数来解析命令行参数. 移植到Windows下 getopt.h #ifndef _GETO ...

  5. 基于Centos7xELK+Kafka集群部署方案

    本次集群部署使用ELK版本统一为6.8.10,kafka为2.12-2.51 均可在官网下载 elasticsearch下载地址:https://www.elastic.co/cn/downloads ...

  6. greenplum6.14、GPCC6.4安装详解

    最近在做gp的升级和整改,所以把做的内容整理下,这篇文章主要是基于gp6.14的安装,主要分为gp,gpcc,pxf的一些安装和初始化.本文为博客园作者所写: 一寸HUI,个人博客地址:https:/ ...

  7. Starting Tomcat v9.0 Server at localhost' has encountered a problem

    •问题描述 在通过 Eclipse 打开 Tomcat 时报错: •解决方案 找到 Tomcat 的安装位置,打开 tomcat\bin 目录,找到 shutdown.bat,手动关闭 tomcat: ...

  8. .NET 开源配置组件 AgileConfig 初体验

    介绍 在微服务大行其道的今天,系统会被拆分成多个模块,作为单独的服务运行,同时为了集中化管理,我们还需要日志中心,配置中心等,很多开发人员可能更熟悉 ApolloConfig,这个组件功能也很完善,d ...

  9. HTML5-本地存储浅谈

    Web Storage是HTML5里面引入的一个类似于cookie的本地存储功能,可以用于客户端的本地存储 sessionStorage && localStorage session ...

  10. MySQL-一条sql语句的执行顺序

    手写: SELECT DISTINCT <select_list> FROM <left_table> <join_type> JOIN <right_tab ...