2025上半年,最新 AI实践都在这!20+ 应用案例,任听一场议题就值回票价 了解详情
写点什么

使用领域驱动设计中的 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:415119
用户头像

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

关注

评论

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

进阶面试皆宜!阿里强推Java程序员进阶笔记,差距不止一点点

Java java面试 Java八股文 Java面试题 Java面试八股文

【全网首发】华秋CAM:免费Gerber查看器,离线版!

华秋电子

系统梳理面试6大专题,阿里爆款Java面试速成笔记也太香了

Java java面试 Java八股文 Java面试题 Java面试八股文

直击面试!阿里技术官手码12W字面试小册在Github上爆火

Java java面试 Java八股文 Java面试题 Java面试八股文

面试官:你能和我说一下 CMS 垃圾回收器吗?

Java你猿哥

算法 CMS JVM 垃圾回收器 垃圾收集器

SpringBoot限制接口访问频率 - 这些错误千万不能犯

Java spring Spring Boot 框架

阿里开源SpringBoot全栈小册!Github已标星百万

Java spring Spring Boot 框架

JVM调优实战:优化Java应用程序的性能

Java JVM 性能调优

2023年企业降低云支出的小方法汇总

行云管家

云计算 云资源 云成本 云支出

火山引擎DataTester:小改动带来大收益,A/B实验助力幸福里APP精准优化

字节跳动数据平台

ab测试 A/B 测试

BSC智能链游戏链系统开发解析

Congge420

区块链追溯系统开发 元宇宙 元宇宙系统开发

学会这招,来给你的 SpringBoot 工程部署的 jar 包瘦瘦身吧!

Java你猿哥

Java jar Spring Boot ssm

阿里、字节等大佬神创,必须是全网最全的Netty核心原理手册

Java你猿哥

Java 源码 Netty ssm netty内存管理

OpenHarmony社区运营报告(2023年4月)

OpenHarmony开发者

OpenHarmony

如何使用、部署 Auto-GPT?系统开发技术分析

Congge420

系统开发 区块链、 autogpt

TF游戏Ai智能系统开发

Congge420

系统开发 区块链、 智能运维AIOps

面试官:Spring Boot 的启动流程你了解吗?我:。。

Java你猿哥

Java spring Spring Boot ssm main

IPQ8072 or IPQ8072A with the QCN9074/9024 chipset / well-suited for high-end routers.

Cindy-wallys

IPQ8072

GitHub标星30k!基于Spring MVC Mybatis分布式开发系统-zheng项目(内附源码)

Java你猿哥

开源 架构设计 分布式架构 JavaEE zheng

【活动预告】数据集成引擎BitSail遇上CDC

字节跳动数据平台

数据集成平台 bitsail

Seata 的可观测实践

阿里巴巴云原生

阿里云 云原生 seata

聊聊 万亿流量场景下的负载均衡实践

Java你猿哥

负载均衡 ssm 高并发 DNS 负载均衡架构

Wallys miniPCIe wlan modules/ QCA9880 /2.4G&5G

Cindy-wallys

QCA9880

刷爆LeetCode!字节技术官亲码算法面试进阶神技太香了

Java 数据结构 算法 LeetCode

3F聆听

郭明

软件测试/测试开发丨Python控制流–分支判断和循环

测试人

Python 软件测试 自动化测试 测试开发

硬核!互联网资深大佬手码高并发编程速成笔记(2023版)限时开源

Java 并发编程 高并发

真香!阿里最新产出分布式进阶实战手册,涵盖分布式架构所有操作

Java你猿哥

架构 微服务架构 Spring Cloud Spring Boot ssm

关于PCBA元器件布局的重要性

华秋PCB

工具 元器件 PCB 布局 PCB设计

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