楼主: xihawangzi
96 0

[其他] 【软件架构设计】领域建模1:什么是领域模型? [推广有奖]

  • 0关注
  • 0粉丝

学前班

80%

还不是VIP/贵宾

-

威望
0
论坛币
10 个
通用积分
0
学术水平
0 点
热心指数
0 点
信用等级
0 点
经验
30 点
帖子
2
精华
0
在线时间
0 小时
注册时间
2018-12-18
最后登录
2018-12-18

楼主
xihawangzi 发表于 2025-11-12 18:33:38 |AI写论文

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

求职就业群
赵安豆老师微信:zhaoandou666

经管之家联合CDA

送您一个全额奖学金名额~ !

感谢您参与论坛问题回答

经管之家送您两个论坛币!

+2 论坛币

什么是领域模型?

核心观点: 领域模型如同业务世界的“地图”,它以可视化的方式描绘了业务概念及其相互关系,使开发者和业务人员能够使用同一套“语言”进行交流,避免沟通时的误解。

什么是领域模型?这是许多开发者在接触领域驱动设计时常遇到的第一个疑问。业务人员提到的“账户”、“凭证”、“挂失”具体指什么?这些概念之间有何关联?为什么相同的需求不同的人会有不同的理解?这些问题背后,实际上都指向一个关键问题——

如何确保团队对业务领域有统一的理解?

一、领域模型是什么?

领域模型是将业务世界的概念和关系以图形化形式展示出来。

就像建造房屋前需要先绘制建筑图纸一样,在开发软件之前也需要先绘制“业务图纸”。这份“业务图纸”即为领域模型。它不仅列举了业务术语(如“账户”、“凭证”),更重要的是展示了这些概念之间的关联。

例如,在银行系统中,一个“账户”可能对应多个“凭证”(银行卡、存折、存单),每个“凭证”都有生效和失效日期。这些关系如果用文字描述,可能需要多段话才能说明白,但通过领域模型图示化后,一目了然。

具体来说,类图会这样展示:账户与凭证之间是一对多的关系(一个账户可以关联多个凭证),而凭证有三种类型——银行卡、存折、存单,它们都继承自“凭证”这一父类。银行卡有卡号,存折有存折号,存单有存单号,虽然都是凭证号,但格式各异。这些关系通过类图一画,就变得清晰明了。

更重要的是,领域模型通常使用两种图表来表示:

  • 类图(展示概念之间的关系)和
  • 状态图(展示业务对象的状态变化)。

就像地图有地形图和交通图一样,类图告诉我们“有什么”,状态图则告诉我们“如何变”。

例如,储蓄账户的状态图会展示:账户有四种状态——正常、挂失、冻结、销户。从“正常”状态可以转到“挂失”状态(需要身份验证),也可以转到“冻结”状态(需要授权),还可以转到“销户”状态。从“挂失”状态可以回到“正常”状态(需要解除挂失),从“冻结”状态可以回到“正常”状态(需要授权解除)。在“正常”状态下,可以进行存款和取款交易。这些状态转换规则通过状态图一画,业务流程就清晰明了。

二、为什么需要领域模型?

领域模型是连接业务与技术的桥梁,它解决了三个核心问题:沟通不足、分析瘫痪和理解偏差。

解决沟通不足的问题

很多项目失败并非因为技术问题,而是因为开发者和业务人员“说不到一块去”。业务人员使用业务术语(如“挂失”、“解除挂失”),而开发者则使用技术术语(如“状态机”、“事务”)。双方都觉得对方说得对,但理解却各不相同。

领域模型就像为双方提供了一本“翻译词典”。当开发者问“挂失是什么意思”时,业务人员可以指着状态图说:“看,这就是挂失——账户从‘正常’状态变为‘挂失’状态,需要身份验证。挂失后账户不能进行交易,但可以通过解除挂失回到正常状态。” 当业务人员问“这个功能如何实现”时,开发者可以指着类图说:“看,账户与凭证是一对多的关系,凭证有三种类型(银行卡、存折、存单),因此我们可以设计一个Account表和一个Credential表,Credential表通过外键关联Account表,并使用type字段区分凭证类型。”

更重要的是,领域模型不是开发者单独绘制的,而是与业务人员共同完成的。在绘图过程中,双方会不断讨论、澄清和确认,这个过程本身就是深度沟通。就像两个人一起看地图找路,比一个人看地图、另一个人听描述要准确得多。

解决分析瘫痪的问题

有些项目在需求分析阶段迟迟无法推进,讨论来讨论去,就是定不下来。例如,在银行系统中,客户、账户和凭证之间的关系到底如何理解?“一卡通”、“一折通”这些概念反复讨论,却始终理不清楚。

领域模型提供了一种渐进的方法:

理解一点,画一点,公开讨论,再理解一点,再画一点。就像建造房屋一样,不是一次性完成所有图纸,而是先绘制地基,再绘制框架,最后绘制细节。每绘制一层,团队的理解就加深一层,讨论也更加聚焦。

例如,在软件配置管理系统的开发中,最初的理解可能是零散的:有“角色”、“工件”、“变更”、“基线”等概念,但关系不明确。通过不断建模,逐渐发现:

  • 角色执行活动,活动可以生成、使用或修改工件
  • 工件产生变更,但不是所有变更都需要管理,只有受控的变更才能纳入基线
  • 配置项是工件的子类,只有通过评审的工件才能成为配置项
  • 基线由多个配置项组成,是在某个时间点的快照

这些关系链最终形成一个完整的领域模型。这个过程就像拼图,一块块地拼凑,最终拼出完整画面。

提供稳定的设计基础

技术会变化(从命令行界面到Web界面),数据存储也会变化(从文件到数据库),但业务的核心概念通常非常稳定。例如,在航空订票系统中,无论界面如何变化,系统如何升级,“航班”、“乘客”和“折扣策略”等核心概念不会改变。

领域模型抓住的就是这些稳定的中心概念。因此,一个良好的领域模型可以跨越技术变迁,成为系统设计的稳定基础。就像房子的结构图一样,无论装修风格如何变化,承重墙的位置不变。

三、领域模型在软件开发中的作用

领域模型贯穿于软件开发的各个阶段,从需求分析到架构设计,再到编码实现,它都是关键的思考工具。

在需求分析阶段,领域模型帮助团队理解业务,构建共享的词汇表。在架构设计阶段,领域模型影响系统的可扩展性——优秀的领域模型使系统易于扩展,而较差的领域模型则导致系统难以扩展。在编码实现阶段,领域模型成为业务层的核心,指导代码的组织方式。

更重要的是,领域模型还对界面设计和数据设计产生影响。界面展示的内容很大程度上取决于领域模型中的重要概念。数据存储的内容由领域模型中的关系直接决定数据库表的设计。

这意味着,领域模型不是可有可无的装饰品,而是软件系统的“基因”。系统的功能范围、扩展能力和用户体验都受到领域模型的重要影响。

总结:领域模型是团队沟通和系统设计的共同语言。领域模型的价值不在于绘制得多么精美,而在于它使团队对业务有了共同的理解。就像地图的价值不在于绘制得多么精确,而在于让所有人都明白“我们在哪里,要去哪里”。

因此,在项目中,不要急于编写代码,先花时间构建领域模型。这一过程可能会发现许多之前未考虑清楚的问题,甚至推翻之前的假设,但这些都是值得的。因为在纸上修改模型比在代码中修改系统要容易得多,成本也低得多。

更重要的是,领域模型不是一次性的工作,而是一个随着对业务理解加深不断迭代的过程。就像地图需要定期更新一样,领域模型也需要根据新的业务需求进行调整。但核心概念和关系往往会在迭代过程中越来越清晰,越来越稳定。

二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

关键词:软件架构 credential Account Count 是什么意思

您需要登录后才可以回帖 登录 | 我要注册

本版微信群
加好友,备注cda
拉您进交流群
GMT+8, 2026-2-5 11:36