首页 > 其他分享 >DDD能够帮我们设计出清晰的领域和应用边界

DDD能够帮我们设计出清晰的领域和应用边界

时间:2023-10-19 15:34:39浏览次数:31  
标签:边界 模型 业务 领域 设计 清晰 DDD

DDD能够帮我们设计出清晰的领域和应用边界

DDD 包括战略设计和战术设计两部分。战略设计主要从业务视角出发,建立业务领域模型,划分领域边界,建立通用语言的限界上下文,这些限界上下文可以作为微服务设计的参考边界。而战术设计则从技术视角出发,着重于领域模型的技术实现,包括聚合根、实体、值对象、领域服务、应用服务和资源库等代码逻辑的设计和实现。

在战略设计过程中,领域模型的建立是重中之重。为此,DDD 提出了事件风暴这一建立领域模型的方法。事件风暴是一个从发散到收敛的过程,通常采用用例分析、场景分析和用户旅程分析,全面分解业务领域,梳理领域对象之间的关系,这是一个发散的过程。在事件风暴过程中,会产生很多实体、命令、事件等领域对象,我们将这些领域对象从不同的维度进行聚类,形成如聚合、限界上下文等边界,建立领域模型,这就是一个收敛的过程。

因此,DDD 可以帮助软件工程师建立清晰的领域模型,划分业务和应用边界,以指导微服务的设计和拆分。事件风暴是建立领域模型的主要方法,通过其发散的过程和聚合的过程,建立起合理的领域模型,从而实现高效的软件开发和落地。

 

我们可以用三步来划定领域模型和微服务的边界。

  • 在领域驱动设计的战略设计中,我们采用事件风暴方法梳理业务过程中的用户操作、事件以及外部依赖关系等,从而梳理出领域实体等领域对象。
  • 然后,我们根据领域实体之间的业务关联性,形成聚合,并确定聚合中的聚合根、值对象和实体。
  • 接着,根据业务及语义边界等因素,将一个或多个聚合划定在一个限界上下文内,形成领域模型。这个过程中,我们建立了领域模型,划定了业务领域的边界,建立了通用语言和限界上下文,确定了领域模型中各个领域对象的关系。这些限界上下文可以作为微服务设计的参考边界,从而确定了应用端的微服务边界。

在从业务模型向微服务落地的过程中,即从战略设计向战术设计的实施过程中,我们会将领域模型中的领域对象与代码模型中的代码对象建立映射关系,将业务架构和系统架构进行绑定。当调整业务架构和领域模型以响应业务变化时,系统架构也会同时发生调整,并同步建立新的映射关系。这种方式可以帮助我们实现高效的软件开发和落地,从而更好地应对业务需求变化。

因此,通过领域驱动设计的战略设计和战术设计,我们可以清晰地划定领域边界,建立领域模型,帮助我们实现微服务的设计和拆分,同时也能够有效地响应业务变化,提高软件开发和落地的效率。

3.3 微服务与DDD的异同

DDD 是一种面向复杂业务领域的设计方法论,而微服务是一种面向分布式系统的架构风格。它们的共同目标都是通过将系统分解为更小,更易于管理的组件来提高系统的可维护性和可扩展性。

  • 在 DDD 中,我们关注的是业务领域的划分和领域模型的设计,以便更好地理解业务需求,并将其转化为可执行的代码。
  • 在微服务中,我们主要关注的是运行时的通信,容错和故障隔离,以及服务治理等问题,以确保各个微服务可以独立开发、测试、构建和部署。
  • 通过结合 DDD 和微服务,我们可以更好地实现高效的业务逻辑,同时也可以充分利用微服务的优点,提高应用程序的可扩展性和可维护性。因此,DDD 和微服务是互补的,可以共同用于构建可靠且高效的应用程序。

标签:边界,模型,业务,领域,设计,清晰,DDD
From: https://www.cnblogs.com/zenghansen/p/17774820.html

相关文章

  • 2023年10月最新全国省市区县和乡镇街道行政区划矢量边界坐标经纬度地图数据 shp geojs
    发现个可以免费下载全国 geojson 数据的网站,推荐一下。支持全国、省级、市级、区/县级、街道/乡镇级以及各级的联动数据,支持导入矢量地图渲染框架中使用,例如:D3、Echarts等geojson数据下载地址:https://geojson.hxkj.vip该项目github地址:https://github.com/TangSY/echarts-m......
  • 使用不同边界的三阶样条拟合样本数据
    importnumpyasnpimportmatplotlib.pyplotaspltfromscipy.interpolateimportCubicSpline#样本数据点(4.0,4.2),(4.3,5.7),(4.6,6,6),(5.3,4.8),(5.9,4,6)x=np.array([4.0,4.3,4.6,5.3,5.9])y=np.array([4.2,5.7,6.6,4.8,4.6])#确保第一个和最后一个数据......
  • 产品代码都给你看了,可别再说不会DDD(七):实体与值对象
    这是一个讲解DDD落地的文章系列,作者是《实现领域驱动设计》的译者滕云。本文章系列以一个真实的并已成功上线的软件项目——码如云(https://www.mryqr.com)为例,系统性地讲解DDD在落地实施过程中的各种典型实践,以及在面临实际业务场景时的诸多取舍。本系列包含以下文章:DDD入门DD......
  • DDD(Domain-Driven Design,领域驱动设计)
    一、什么是DDDDDD指通过统一语言、业务抽象、领域划分和领域建模等一些列手段来控制软件复杂度的方法论,主要是用来指导如何解耦业务系统,划分业务模块,定义业务领域模型及其交互。 二、领域驱动开发过程不再以数据模型为起点,而是以领域模型为出发点,领域模型对应业务......
  • Unity完美像素Sprite:怎么让图片变得清晰(转载) Unity Pixel Perfect Sprite: How To Ach
    https://gamedevelopertips.com/unity-pixel-perfect-sprite/SoIwasmakingalittleprototypeformynewgamewhenIjustcameacrossalittleproblem.ThespritethatIwasloadingintoUnitywasjustlookingtoopixelatedandnotsharpatall.SoIspen......
  • DDD(Domain-Driven Design,领域驱动设计)
    DDD(Domain-DrivenDesign,领域驱动设计)是一种软件开发方法论,它注重对业务领域的深入理解,并将领域模型作为软件设计的核心。在DDD中,领域模型是通过对业务领域的分析和抽象而得到的,它是对业务领域中的概念、规则、行为等的描述。领域模型的设计是DDD中的一个重要环节,它需要开发团队......
  • ddddocr1.4.8失效的解决方法
    1.问题描述fromseleniumimportwebdriverfromtimeimportsleepdriver=webdriver.Chrome()driver.maximize_window()driver.get('http://124.223.30.31:xxxx/forum.php')driver.find_element('id','ls_username').send_keys('admi......
  • VISIO画的论文图如何清晰地放在LATEX论文中?
    1、将VISIO图Microsoftprinttopdf2、利用AdobeAcrobat进行裁剪3、(optional)如果visio图中有图片,步骤1的pdf中图片可能存在不清晰,利用AdobeAcrobat编辑替换掉不清晰的图片4、(optional)如果进行了第3步,还需要再进行Microsoftprinttopdf一次,否则步骤5中的图片仍然不清晰5、......
  • 针对直播痛点的关键技术解析——首帧秒开、清晰度、流畅度
    ​一、直播体验升级的一把利刃——「畅直播」良好的直播体验一直是直播产品留住用户的关键流量密码。国内直播行业已呈现一片红海,各直播产品的用户增长速度在逐渐放缓,行业内竞争进入白热化阶段,急需通过在直播体验上的精细化运营来保障平台营收。如针对重大活动、头部主播进行......
  • 在.NET应用程序中实现领域驱动设计(DDD)
    本文介绍了如何在.NET应用程序中实现领域驱动设计(DDD),以便更好地应对复杂业务需求。我们将介绍DDD的核心概念,并通过一个具体的业务场景演示如何在实践中应用这些概念。引言在开发具有复杂业务需求的应用程序时,我们需要确保我们的代码能够灵活地应对变化。领域驱动设计(DDD)是一种方......