首页 > 其他分享 >系统设计思想之Domain驱动

系统设计思想之Domain驱动

时间:2024-09-05 23:14:45浏览次数:11  
标签:Domain 思想 业务 模型 子域 领域 设计 驱动 DDD

一、DDD从放弃到入门

    希望了解一套微服务框架的;希望学习到新技术的;开发的系统不复杂,模块少而独立的;当前自己设计的架构已满足拓展性,可复用性,技术与业务复杂度已分离的;     这几类人群不是DDD的目标人群,建议尽早放弃,学习领域驱动设计能得到的收获概括起来大致如下:     1、领域驱动设计是一套系统的设计思想,规范你的设计过程     2、领域驱动设计用于处理模块繁杂,业务复杂度高的产品研发,旨在将将业务复杂度与技术复杂度分                离,抽离出业务各个领域的核心内核,便于领域知识的复用     3、领域驱动设计强调技术专家和业务专家,通过统一的语言来完成领域的建模,帮助技术侧和业务侧形            成一套统一的语言     4、微服务与领域驱动设计天然搭配,微服务拆分中一直模糊的边界,可通过领域驱动设计来划分清楚     5、领域驱动设计能帮助提高大型系统的拓展和演进能力   二、什么是DDD     如下图,传统的敏捷开发模式,我们更多的使用数据驱动设计的思想,按照功能模块来,拆分成一个个的小模块,每个模块要实现什么功能,需要什么样的数据,然后就通过ER数据建模,建库建表后开干了,这样会导致N个系统中重复的功能会反复建设,Service层编写了繁杂的业务逻辑,耦合度极高,经常牵一发而动全身。  

 

 

 

     而DDD是指需求输入的时候,从领域开始聊起,比如教育是一个领域,先从校长聊起,然后聊到他的关联实体老师,学生,考试等等,这些实体之间的关联关系是什么,他们各自都会有哪些行为方法和业务逻辑。聊清楚后进行实体的建模,聚合实体的行为形成一个个领域服务,比如学生+老师的实体组合成了上课这一领域服务,之后再对领域服务进行编排,组成核心的可复用的业务逻辑。      再之后就是经过领域模型划分微服务界限,映射模型和微服务代码后进行开发,DDD就是以领域为入口,来解决产品设计,研发的思想。      DDD通过领域建模,编排核心业务逻辑后映射到微服务开发的过程,有利于构建出企业可复用的核心能力,减少重复的IT建设,同时开发者可以根据模型和微服务代码设计的对应关系,快速清晰的完成开发。同时后面博文会讲到DDD严格的分层结构设计,能够帮助构建一个“低耦合,高内聚”,可演进的系统。      三、DDD的战略和战术   DDD不是架构,而是架构设计思想,演进的方法论,旨在聚焦业务领域模型来控制业务的复杂性,同时分离技术和业务耦合的复杂性。   DDD包括战略设计和战术设计两部分
  战略设计:从业务视角出发,业务领域专家和技术专家通过事件风暴,建立共同的语言,构建领域模型,同时划分好领域的限界上下文,并以限界上下文作为微服务拆分和设计的边界,做业务核心逻辑的编排,从而在业务中台构建可复用的核心能力。
  战术设计:从技术角度出发,聚焦于领域模型如何映射到微服务代码开发的实现上。限界上下文和领域模型作为输入,从领域模型中抽象出来聚合,聚合根,实体,值对象,领域服务,领域事件,应用服务编排,仓储等,以表格或其他形式一一对照模型去设计代码,并最终结合分布式缓存,消息最终一致性等基础支撑实现落地。   DDD按照一定规则将业务领域细分,细分到一定程度后,DDD将要解决的问题限定在特定范围内,这个过程中,可以将领域划分为子域,子域还可以继续划分为子子域,直到细分的程度,可以明确的区分不同业务领域,又不至于过度拆分,并适合微服务团队实施落地。DDD通常将划分后的子域区分为核心子域,支撑子域和通用子域。比如电商领域的子域划分    

 

   DDD这种子域的划分方法,可以帮助企业IT建设过程中确定中台的领域边界。

四、DDD,中台和微服务如何协同工作   业务中台的形成,实际也是业务领域不断细分,演进和能力沉淀的过程,所以中台是DDD战略设计的落地,DDD最擅长的就是领域建模。
  微服务的架构设计,参照着建模后的领域模型和限界上下文,作为微服务拆分的边界和依据,然后微服务与领域里的一个个子域互相映射,完成代码开发,是DDD的战术落地。   

 

   本文先从粗粒度来描述DDD战略设计和战术设计的实现,细粒度的实现待后面更新完子域,限界上下文,实体和值对象,聚合和聚合根,仓储模式,领域事件,分层架构等等后自然了解。下面看领域建模和中台建设,如何映射与关联。

  

  通用中台对应的DDD的通用子域和支撑子域,实现企业可复用的通用业务能力,核心中台对应DDD的核心子域,这部分是DDD战略设计落地的产物。         领域模型和限界上下文,则与中台建设中的微服务对应,DDD建立的领域模型可以作为微服务划分的依据,完成微服务的拆分和开发,这部分是DDD战术设计落地的产物。         中台业务抽象就是领域建模的过程,系统抽象就是微服务设计过程,中台业务建模和落地,大致分如下几步         1、选取主领域模型,按照业务流程节点,将业务划分为业务中台(多个核心子域),将通用的功能和支撑划分为通用中台(通用域,支撑域),较大范围的业务领域,需要再逐级划分为大小合适的领域再构建领域模型         2、选取逻辑相对完整的领域模型作为主领域模型(如用户这个领域对象,常常分散到不同的领域模型中)以主领域为基准,扫描其他中台领域模型,检查是否存在功能重叠的模型,合并到主领域模型,完成领域模型的提炼         3、选择其他主领域模型重复第二步,直到完成所有领域模型的比对         4、将领域模型作为微服务设计的输入,完成微服务拆分和设计

 

   

  参考书籍 ——《基于DDD和微服务的中台架构与实现》欧创新、邓頔
  参考书籍 ——《领域驱动设计》Eric Evans
  参考书籍 ——《架构真经》Martin L. Abbott

标签:Domain,思想,业务,模型,子域,领域,设计,驱动,DDD
From: https://www.cnblogs.com/jiyukai/p/18399375

相关文章

  • 【转载】《扩散模型是实时游戏引擎(Diffusion Models Are Real-Time Game Engines)》的
    地址:https://www.youtube.com/watch?v=VniPJII6ak08月29号,谷歌DeepMind发布了一篇名为《扩散模型是实时游戏引擎(DiffusionModelsAreReal-TimeGameEngines)》的论文,向我们展示了世界上第一个完全由神经模型驱动的游戏引擎,GameNGen。这也是历史上首次,AI能在不借助其他......
  • AP2121太阳能草坪灯驱动芯片
    概述AP2121是一款专为太阳能LED草坪灯设计的专用集成电路。仅需一个外接电感即可组成太阳能照明装置。由开关型驱动电路、光控开关电路、过放保护电路、内部集成的肖特基二极管等电路组成。AP2121采用专利技术,使得欠压关断时LED灯无闪烁AP2121工作电压为0.9V到1.5V,适合单节......
  • AP2121太阳能草坪灯驱动芯片
    概述AP2121是一款专为太阳能LED草坪灯设计的专用集成电路。仅需一个外接电感即可组成太阳能照明装置。由开关型驱动电路、光控开关电路、过放保护电路、内部集成的肖特基二极管等电路组成。AP2121采用专利技术,使得欠压关断时LED灯无闪烁AP2121工作电压为0.9V到1.5V,适合......
  • Linux驱动开发基础(定时器、mmap)
    所学来自百问网目录1.定时器1.1定时器时间单位1.2内核函数1.3定时器的应用举例2.mmap2.1内存映射现象与数据结构2.2ARM架构内存映射简介2.2.1一级页表映射过程2.2.2二级页表映射过程2.2.3应用程序新建内存映射2.2.3.1mmap调用过程2.2.3.2cache和buffer......
  • gadget驱动框架(二)
    usb_composite_driver的创建于注册源码:drivers/usb/legacy/serial.c//创建usb_composite_driverstaticstructusb_composite_drivergserial_driver={.name="g_serial",.dev=&device_desc,.strings=dev_strings,.max_s......
  • T8332FN凯钰Tmtech LED驱动芯片升降压降压
    T8332FN:高效LED驱动控制器的核心功能与应用分析T8332FN是一款由TMTechnology,Inc.设计的高效LED驱动控制器,广泛应用于高功率LED驱动领域,如汽车照明、LCD背光和室内外照明等。该芯片集成了多种保护功能和调节能力,能够在复杂应用中提供高精度、稳定的恒流输出。本文将对T8332F......
  • SeleniumBase 利用数据驱动 方式运行-使用笔记(五)
    自动化福音(爬虫、办公、测试等)SeleniumBase使用笔记(五)SeleniumBase利用数据驱动方式运行有同学问我,如何对SeleniumBase使用数据驱动见评论区,于是有了这个文章。目录SeleniumBase继承方式SeleniumBase夹具方式继承方式这种方式的使用,前提是你的代码使用的继承B......
  • PPT讲解伺服电机及其驱动技术
    ......
  • gadget驱动框架(一)
    之前在linux移植udc驱动的时候,没有深入的理解整个gadget驱动框架,现在重新再屡屡gadget驱动,以便后期再次学习。本系列的文章以虚拟串口进行分析,相关源码均是基于linux4.19.123。gadget驱动框架gadget源码主要在:drivers/usb/gadget,以虚拟串口为例,对源文件做简单说明:drivers/usb/g......
  • CareGPT:开源驱动的医疗大语言模型
    CareGPT:医疗AI的新篇章在人工智能快速发展的今天,医疗领域正迎来一场革命性的变革。CareGPT作为一个开源的医疗大语言模型项目,正站在这场变革的前沿,为医疗AI的未来描绘出令人振奋的蓝图。什么是CareGPT?CareGPT,全称"关怀GPT",是一个专注于医疗领域的大语言模型。它不仅仅是一......