【软件工程】基于领域建模的产品与技术方案设计(领域驱动设计DDD)

文章目录

      • 1、领域建模
      • 2、产品方案、技术方案
      • 3、领域驱动设计DDD

1、领域建模

领域模型(domain model)

  • 是对领域内的概念类或现实世界中对象的可视化表示。领域模型也成为概念模型、领域对象模型和分析对象模型。
  • 域模型是一种概念模型,也叫问题域模型。它表述的是某个领域的现实概念。

领域建模

  • 是指通过对特定领域中的实体、关系、行为等进行抽象和建模,以便更好地理解和描述该领域的过程和特征。
  • 领域建模可以帮助人们更好地理解和分析问题,从而更好地设计和实现相应的解决方案。
  • 在软件开发中,领域建模通常用于设计和开发软件系统,以确保系统能够满足用户需求并符合领域的规则和约束。
  • 在领域建模中,通常使用一些建模工具和技术,如UML(统一建模语言)、ER图(实体-关系图)等。

领域模型与系统模型

  • 每个领域模型都要有一个系统模型与之对应,最好能完全一一对应(DDD就是这么做的),他们的命名和属性也尽可能保持一致,使用相同的术语。
  • 具体到系统模型的设计,就是面向对象设计的范畴了,这里可以使用各种各样的设计模式、GRASP、SOLID去设计和规划。
  • 系统模型:
    系统是由多个子系统或子域组成的集合,用于实现一定的功能或解决一定的问题。
    子域是指系统中的一个独立的领域,通常包含一组相关的实体、行为和规则。
    用例是指描述系统如何与用户或其他系统交互以实现特定目标的场景或情境。用例通常描述了系统的行为和响应,以及与用户或其他系统之间的交互方式。

参考资料:1, 2

2、产品方案、技术方案

产品方案与技术方案的区别?

  • 技术方案主要关注的是如何实现一个技术性的解决方案,它包括了技术架构、技术组件、技术流程等,强调的是技术实现的细节和具体实现方案。技术方案通常由开发人员和技术架构师等技术人员来制定。
  • 而设计方案则更加关注整个产品的用户体验,它包括了用户界面设计、用户交互设计、用户流程设计等,强调的是产品设计和用户体验的优化。设计方案通常由产品经理和设计师等人员来制定。

领域建模与方案设计的关系

  1. 领域建模是方案设计的基础。 在进行产品方案设计之前,需要对相关领域进行深入的调研和分析,建立领域模型。这样可以更好地理解用户需求和行业趋势,为产品方案设计提供有力支持。
  2. 领域建模可以指导方案设计。 在领域建模的过程中,可以发现用户需求和行业痛点,从而指导产品方案设计。通过领域建模,可以确定产品的核心功能和特点,避免产品设计过程中的盲目性。
  3. 方案设计可以反向影响领域建模。 在产品方案设计的过程中,可能会发现领域模型中存在的问题或不足之处,从而反向影响领域建模。通过产品方案设计,可以不断完善和优化领域模型,使其更加贴近实际需求。
    综上所述,领域建模和产品方案设计是相互依存的,彼此之间相互影响,共同构建出一个优秀的产品。

如何设计一份好的产品方案
通过领域建模设计一份好的产品方案,可以避免在产品开发过程中出现重大问题。

  1. 定义产品的范围和目标用户:在领域建模的初期,需要明确产品的范围和目标用户,以便后续的建模和设计。

  2. 确定产品的主要功能和特性:根据产品的范围和目标用户,确定产品的主要功能和特性。这些功能和特性应该能够满足用户的需求,并且符合领域的规则和约束。

  3. 分析产品的业务流程和数据流:通过领域建模工具和技术,分析产品的业务流程和数据流,以便更好地理解产品的运作方式和数据处理方式。

  4. 建立用例模型:根据产品的主要功能和特性,建立用例模型,描述产品与用户和其他系统之间的交互方式和场景。

  5. 建立领域模型:根据产品的业务流程和数据流,建立领域模型,描述产品所涉及的实体、行为和规则。

  6. 设计系统架构和组件:根据用例模型和领域模型,设计系统的架构和组件,以实现产品的主要功能和特性。

  7. 验证和测试:在产品开发过程中,进行验证和测试,以确保产品符合用户需求和领域规则,并且能够正常运行。

如何设计一份好的技术方案?

领域建模是一种将领域知识转化为可执行的软件系统的方法。通过领域建模,可以更好地理解业务需求和技术实现之间的关系,从而设计出更好的技术方案。以下是一些通过领域建模设计好的技术方案的建议:

  1. 确定领域模型:领域模型是指业务领域中的所有实体、关系、行为和规则。通过建立领域模型,可以更好地理解业务需求和技术实现之间的关系,并为技术方案提供支持。

  2. 选择适当的架构:根据领域模型,选择适当的架构,以实现业务需求。例如,对于大规模的数据处理,可以选择分布式系统架构,对于高并发的业务,可以选择微服务架构。

  3. 选择合适的技术栈:根据领域模型和架构,选择合适的技术栈。选择技术栈时,需要考虑技术的可行性、成本和效率等因素。

  4. 设计合适的接口和数据模型:根据领域模型,设计合适的接口和数据模型。接口和数据模型需要满足业务需求,并且易于使用和维护。

  5. 实现和测试技术方案:根据设计的技术方案,实现和测试系统。在实现和测试过程中,需要不断优化技术方案,以满足业务需求和用户需求。

3、领域驱动设计DDD

领域驱动设计(DDD)是一种基于模型驱动的软件设计方式。它以领域为核心,分析领域中的问题,通过建立一个领域模型来有效地解决领域中的核心、复杂问题。

什么是领域,制药领域、环境领域、建筑领域、金融领域等,而在领域内,各种业务规则、业务知识盛行,如何有效的把控规则的变化,应对复杂知识,有一个很关键的四字词语,分而治之。分治法在很多场景下体现了其强大的作用力。领域本身很大,那就拆分,得到更小的领域,也即子域,如同递归调用一般,将一个复杂问题拆分单独求解,而最终将解汇总得到复杂问题解。

领域驱动设计(DDD)的核心概念:

  1. 领域:指业务领域,是DDD的核心概念,是指需要解决的业务问题和业务规则,包括业务实体、值对象、聚合根、领域服务等。

  2. 聚合根:是实体的集合,是整个聚合的根节点,它负责保护聚合内的一致性,是聚合内的实体和值对象的访问入口。

  3. 实体:是具有唯一标识的对象,它具有生命周期和状态变化,可以包含其他实体或值对象。

  4. 值对象:是没有唯一标识的对象,它的值是由其属性组成的,不可变的,不具有生命周期和状态变化。

  5. 领域服务:是处理业务逻辑的服务,它不属于任何实体或值对象,是跨聚合的。

  6. 限界上下文:是指业务领域的边界,它定义了领域模型的范围和上下文,用于解决不同领域之间的概念和术语混淆问题。

  7. 聚合:是一组相关联的实体和值对象的集合,它们共同完成一项业务操作,是实现领域模型的关键。

  8. 事件:是领域中发生的重要事情,它可以被订阅和处理,用于实现领域事件驱动架构。

  9. 应用服务:是领域模型之上的服务,它负责协调领域模型和应用程序之间的交互,实现业务逻辑的组合和协作。

领域驱动设计(DDD)的方法

  1. 确定业务领域:确定需要解决的业务问题和业务规则,明确业务领域的范围和上下文。

  2. 分析业务领域:深入了解业务领域,收集和整理业务需求和业务规则,发现业务领域中的实体、值对象、聚合根、领域服务等。

  3. 设计领域模型:将业务领域中的实体、值对象、聚合根、领域服务等概念转化为领域模型,建立领域模型之间的关系,确保领域模型符合业务需求和业务规则。

  4. 实现领域模型:将领域模型转化为可执行的软件系统,实现领域模型中的实体、值对象、聚合根、领域服务等,确保软件系统与领域模型的一致性。

  5. 应用领域模型:将领域模型应用于业务场景中,实现业务逻辑的组合和协作,确保软件系统能够满足业务需求和业务规则。

  6. 优化领域模型:根据实际应用情况,不断优化领域模型,提高软件系统的质量和可维护性。

在实践中,DDD还涉及到一些重要的实践,如聚合、限界上下文、事件驱动架构、领域事件等,这些实践都是为了更好地实现领域模型和业务需求的对应关系。在实际应用中,开发团队需要根据具体业务场景和技术架构来选择和应用这些实践。

参考资料:1-美团技术,2-DDD-cnblog,3-DDD-zhihu, 4-DDD-gitpage, 5-模型巴巴

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/621703.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

codeforces B - Collecting Game

分析 比 a i a_i ai​ 小的一定对 a n s i ans_i ansi​ 有贡献(应该加上)。加上之后 s c o r e score score 变大,在 s c o r e score score 变大的过程中可能会有更多的 a j a_j aj​ 小于 s c o r e score score 。很容易想到排序&…

BRC20通证的深度科普:它的潜力与如何导入到bitget

​BRC-20通证是什么? BRC-20通证:比特币上的“变形金刚”?!不依赖智能合约,它们就像拥有超能力的外星人,直接在比特币的最小单位——聪上刻写JSON代码。哈哈,这比把房子建在乐高积木上还要刺激…

逆水行舟 不进则退

目录 一、前言 二、2023年度总结 三、2024展望未来 一、前言 这是我从工作以来到现在最喜欢的一句话,我想把这句话送给自己也想送给大家。 2019年7月实习到现在已经过去了四年多,进入2024年也迎来了我工作生涯的第五个年头。 在这个行业里&#xff…

Docker五部曲之四:Docker Compose

文章目录 前言Compose应用程序模型Compose规范顶层属性servicenetworkvolumesconfigssecrets 环境变量.env文件environment属性主机shell中的环境变量 Profiles(剖面)启动剖面自动启动剖面和依赖项解析 多compose.yml文件共享与扩展构建规范构建属性 部署…

网站后台拿Webshell

通过注入或者其他途径,获取网站管理员账号和密码后,找到后台登录地址,登录后,寻找后台漏洞上传网页后门,获取网站的webshell webshell的作用是方便攻击者,webshel是拥有fso权限,根据fso权限的不…

DXF文件格式:LWPOLYLINE和POLYLINE的数据结构有何不同?

1. LWPOLYLINE和POLYLINE的数据结构有何不同? LWPOLYLINE和POLYLINE的数据结构在DXF文件中略有不同: LWPOLYLINE(Lightweight Polyline)是一种简化的多段线实体,它使用更少的数据来表示。它的顶点坐标以及与每个顶点…

论文阅读:Bayesian GAN

Bayesian GAN 点击访问paper 官方github 半监督学习对比算法 1.简介 贝叶斯 GAN(Saatchi 和 Wilson,2017)是生成对抗网络(Goodfellow,2014)的贝叶斯公式,我们在其中学习生成器参数 θ g \th…

【收藏】专升本文学常识 · 知识汇总篇幅(一)

对于专升本备考有疑问的同学可以和小哎交流哦~提供大家往年经验和分析~ 1.我国儒家学派的创始人是(孔子)。 2.有“亚圣”之称的(孟子)倡导“民为贵,社稷次之,君为轻”的民本思想。 3.《秋水》中对话的两个神话人物是…

mybatisplus(service CRUD 接口)

一、我们在控制器层都是调用Service层&#xff0c;不会直接调用仓储层。现在我给大家介绍一下怎么快速实现Service 的CRUD 定义接口&#xff1a;IProductService 继承IService<实体> package com.saas.plusdemo;import com.baomidou.mybatisplus.extension.service.ISe…

Bootsrap-导航、栅格、及使用案例

文章目录 一、下载并导入Bootstrap中文文档二、Bootstrap初体验三、Boostrap导航栏四、Boostrap栅格五、博客案例六、用户登录界面七、后台管理界面八、引入图标九、Bootstrap动态效果 一、下载并导入Bootstrap中文文档 二、Bootstrap初体验 实现提交按钮&#xff0c;去中文文…

SpringBoot 入门 SpringBoot 与其他项目整合 集成 Druid 数据库连接池 集成 Log 日志 配置修改

目录 1.SpringBoot简介 1.1.什么是SpringBoot 1.2.特点 2.SpringBoot快速入门 2.1.创建SpringBoot项目 2.2.项目目录介绍 2.3.配置修改 2.4.启动SpringBoot 3.SpringBoot与其他项目整合 3.1.整合JDBC 3.2.整合Druid数据库连接池 3.3.整合MyBatis 3.4.整合Log日志 …

排序算法-堆排序(含C语言代码示例)

一、算法介绍 堆排序是一种基于二叉堆数据结构的排序算法。首先&#xff0c;构建最大堆&#xff08;或最小堆&#xff09;&#xff0c;将待排序的数组视作一个完全二叉树&#xff0c;通过从最后一个非叶子节点开始向上调整&#xff0c;使得每个父节点的值都大于等于&#xff08…

科研绘图(四)火山图

火山图是生物信息学中常用的一种图表&#xff0c;用来显示基因表达数据的变化。它通常将每个点表示为一个基因&#xff0c;x轴显示对数比率&#xff08;log ratio&#xff09;&#xff0c;表示基因表达的变化大小&#xff1b;y轴显示-log10(p-value)&#xff0c;表示变化的统计…

跨镜动线分析丨用AI解读顾客行为,助力零售企业运营与增长

步入数字时代&#xff0c;先进技术让传统零售焕发新生。智慧零售以用户为中心&#xff0c;“人”的数据化价值将反哺生产、渠道、销售、运营全场景。 悠络客正式推出“跨镜动线分析”&#xff0c;运用AI技术&#xff0c;深度分析顾客的进店、逛店等一系列行为&#xff0c;助力零…

host没有管理员权限

1 以管理员身份运行 Windows PowerShell 2 输入 notepad C:\Windows\System32\drivers\etc\hosts 3在自动弹出的host文件里添加信息&#xff0c;然后保存即可

求射线与三角形交点(C#代码Unity环境下测试通过)

上代码&#xff1a; bool RayCrossTriAngle(Ray ray, Vector3 p1, Vector3 p2, Vector3 p3, out Vector3 point) {point Vector3.zero;Vector3 normal Vector3.Cross(p2 - p1, p3 - p1);float t -Vector3.Dot((ray.origin - p1), normal) / Vector3.Dot(ray.direction, nor…

Fluids —— Viscosity: honey

目录 Fixed viscosity: honey Point variable viscosity: honey Fixed viscosity: honey SOP FLIP提供的粘性解释器&#xff0c;可对恒定或变化的粘性&#xff1b;以下是恒定粘性的蜂蜜模拟&#xff0c;蜂蜜的特性与粘度和表面张力等参数相关&#xff0c;可观察到典型的缠绕和…

C#中类型的转换

类型转换 什么是类型转换 类型转换 就是不同变量类型之间的相互转换 类型转换--隐式转换 隐式转换的基本规则--不同类型之间自动转换 大范围装小范围 知识点一 相同大类之间的转换 有符号 long-->int-->short-->sbyte 无符号 ulong-->uint-->ushort-->…

机器学习周报第28周

目录 摘要Abstract一、文献阅读1.题目&#xff1a;2.摘要3.问题描述4.过去方案5.论文方案6.论文模型7.相关代码 摘要 本周阅读了一篇混沌时间序列预测的论文&#xff0c;论文模型主要使用的是时间卷积网络&#xff08;Temporal Convolutional Network&#xff0c;TCN&#xff…

【ARM 嵌入式 编译系列 3.4 -- 查看所依赖库文件的路径 详细介绍】

文章目录 问题背景库文件路径查看库文件路径信息打印显示连接标准库不使用标准库 libgcc.a问题背景 在自己构建的 Makefle系统中对 cortex-m33 代码编译时,在链接阶段总是报出下面问题 ... arm-none-eabi-ld: cannot find libgcc.a: No such file or directory arm-none-eab…