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

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

最新文章

  1. ASP.NET MVC 伪静态的实现
  2. rabbitmq之work_pool
  3. Bootstrap_警示框
  4. Mousejack Hacking : 如何利用MouseJack进行物理攻击
  5. c语言实现二维数组排序,一个4*5的数组,要求每行都进行升序排列,并求出每行的平均值。
  6. 2010多校第一题 hdu3440House Man 差分约束系统
  7. 蓝桥杯 C语言 入门训练 序列求和
  8. SVN分支/合并操作小记
  9. HNOI2017 单旋
  10. 关于最新create-react-app使用react-app-rewired2.x添加webpack配置
  11. 【分布式系列】session跨域及单点登录解决方案
  12. F - 回转寿司 (权值线段树)
  13. Windows环境selenium+Python环境配置
  14. LeetCode--026--删除排序数组中的重复项
  15. js正则匹配以某字符串开始字符串
  16. Android SDK版本号与API Level 的对应关系-转
  17. win10用filezilla server搭建ftp服务器一直无法访问
  18. SQL SERVER - 谁更改了SQL登录密码?
  19. e680. 使三元色图像变明变暗
  20. Python中断多重循环的几种思路exit_flag

热门文章

  1. 使用quartz.net 完成一个winform版的任务提醒工具
  2. mysql最权威的总结
  3. python flake8 代码扫描
  4. Java 语言基础 (初识Java语言, 变量和数据类型, 运算符, 流程控制语句, 数组)
  5. io流(对象流总结)
  6. vue+django实现websocket连接
  7. AppDomain实现【插件式】开发
  8. Win10环境下YOLO5 快速配置与测试
  9. Markdown部分用法总结
  10. java面试-synchronized与lock有什么区别?