写点什么

使用领域驱动设计中的 Bounded Context 概念分解大领域模型

  • 2013-03-04
  • 本文字数:1077 字

    阅读完需:约 4 分钟

Juelie Lerman 近期在 MSDN 杂志中解释说,开发者可以应用领域驱动设计(DDD)中的Bounded Context 概念将一个大模型分解为几个较小的模型,每一个模型对应 Entity Framework (EF)中的 Database Context(DbContext 类)。

按照 Julie(她从 2003 年以来就是 Microsoft MVP ,也是一位.NET 平台的顾问及导师)的说法,把一个将大量的类放在一个上下文中的独立模型分解为多个较小的模型是有好处的。Bounded Context 创建的模型较小,而且内聚性更高,同时维持了模型之间的边界,Julie 的文章就是基于这一事实的。但她也指出,比起使用 EF DbContext,DDD 中的 Bounded Context 是一个更大的概念,因此她称自己的实现方式为“受限的”或“专注的”DbContext。

通过分离属于不同上下文的类(例如:将针对顾客的类和针对订单及配送的类分离,并把这些类放入独立的 DbContext 中),Julie 将一个包含了整个应用程序所有类的大型上下文分解为更小而且更专注的上下文,而在其下运行的大型数据模型及数据库表依然不变。
如果在某个上下文中,某个类的所有属性并非全部必需,那就可以创建一个更小而且更专注的类,它涵盖了原始类的某些部分,并间接地涵盖了底层数据库表的某些部分 [z2] ,这是通过在数据库中使用视图来实现的。使用这些类的一个限制是:如果有某些不允许为空的表字段不在这些类的控制之下,那就不能够使用这些类完成数据库的插入操作,否则在进行插入操作时,DbContext 会抛出异常。

使用“Code First”,以自动生成所有数据库表的方式创建数据库需要更多工作,包括需要一个独立的“全局模型(über-model)”,以及一个包含所有类的 DbContext,这个完整的 DbContext 将用于初始化数据库。

对于以这种方式应用 Bounded Context 的做法, DDD 原书的作者 Eric Evans 在一条推特中给出了正面的反馈,不过也有人心存疑虑并给出了备选方案。有反馈意见认为这种做法违背了Bounded Context 的概念,并援引了DDD 社区的定义

“应该[z3] 显式地定义某个模型所应用的上下文。还应该在团队组织、应用中特定部分的使用以及像代码库和数据库模式等物理表现等方面显式地设定边界。要保持边界中模型的严格一致,而不要受外界问题的影响与干扰。”

Entity Framework 是 Microsoft 在.NET 平台上推出的对象关系映射工具

查看英文原文: Using the Domain Driven Design Bounded Context Concept to Shrink a Large Domain Model


感谢臧秀涛对本文的审校。

给InfoQ 中文站投稿或者参与内容翻译工作,请邮件至 editors@cn.infoq.com 。也欢迎大家通过新浪微博( @InfoQ )或者腾讯微博( @InfoQ )关注我们,并与我们的编辑和其他读者朋友交流。

2013-03-04 06:415217
用户头像

发布了 428 篇内容, 共 193.4 次阅读, 收获喜欢 39 次。

关注

评论

发布
暂无评论
发现更多内容

能源行业指标体系建设与 AI 数智化落地:技术方案 + 实践路径

袋鼠云数栈

人工智能 数字化转型 数据治理 能源行业 数据指标体系

2026全球人工智能终端展

AIOTE智博会

人工智能展会 人工智能博览会 人工智能展 人工智能览会 深圳人工智能展

SAKE:基于激活导向的知识编辑技术

qife122

知识编辑 最优传输

闲鱼商品列表API技术文档

tbapi

闲鱼API 闲鱼商品详情接口 闲鱼商品列表接口 闲鱼数据采集

直击WAIC | 百度袁佛玉:加速具身智能技术及产品研发,助力场景应用多样化落地

百度Geek说

AI口语APP的功能优化

北京木奇移动技术有限公司

软件外包公司 APP外包公司 AI英语口语

企业落地Data Agent,一共需要几步?

字节跳动数据平台

大数据 Data Agent 数据智能体

基于 Amazon Nova 实现优化呼叫中心导航场景

亚马逊云科技 (Amazon Web Services)

哈尔滨等保测评:个人信息保护与数字安全防线

等保测评

区块链U卡APP的安全性

北京木奇移动技术有限公司

区块链开发 软件外包公司 web3开发

“上海有AI”,一座城市的智惠答卷

Alter

LazyLLM 教程 | 第 2 讲:10 分钟上手一个最小可用 RAG 系统

商汤万象开发者

不要傻呵呵等金九银十了!

王磊

WAIC·2025|中国移动发布"灵犀2.0"智能体,彩讯股份作为核心伙伴共启AI Agent新篇章

彩讯股份300634

KWDB 分布式部署过程与 deploy.sh cluster -i 命令分析

KaiwuDB

AWS高级解决方案架构师黄海波:GenAI 时代非结构化数据处理的实践与趋势洞察

数新网络官方账号

彩讯股份战略投资中科酷原,布局量子计算产业

彩讯股份300634

闲鱼商品详情API技术文档

tbapi

闲鱼API 闲鱼商品详情接口 闲鱼数据采集

基于深度学习的YOLO框架实现金属工业表面缺陷识别|开箱即用系统级项目(源码+模型+界面)

程序员Geek

人工智能

抖音集团基于Paimon的流式数据湖应用实践

Apache Flink

大数据 flink 实时计算 paimon

如何安装CST的Linux版本

思茂信息

仿真 Linux、 CST Studio Suite

Hello World背后藏着什么秘密?一行代码看懂Java的“跨平台”魔法

poemyang

编译原理 字节码 Java虚拟机

微帧GPU视频硬编优化引擎:面向人工智能大时代的AI算法与硬编协同优化方案

微帧Visionular

Gemini 2.5模型重大升级:更智能的AI技术

qife122

深度学习 AI

彩讯股份入选法制日报社“2024政法智能化建设创新方案”

彩讯股份300634

轻松搞定!KaiwuDB单节点裸机部署(二进制安装包版)

KaiwuDB

2025-07-31

Joseph295

区块链U卡APP的运维

北京木奇移动技术有限公司

活动租赁互动LED舞池特点和场景使用

Dylan

活动 LED LED display LED显示屏 LED屏幕

一个普通IT人的20年奋斗:从小白到编程教育布道者

编程启航栈

技术人成长

行业预测:海外舆情监测系统将成为下一个出海必备工具

沃观Wovision

出海企业 海外舆情监控 沃观Wovision 舆情监测系统

使用领域驱动设计中的Bounded Context概念分解大领域模型_语言 & 开发_Jan Stenberg_InfoQ精选文章