写点什么

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

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

关注

评论

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

音频均衡器EQ

floer rivor

音视频 Eq

PKI系统简介

上海派拉基础研发

CA PKI

拥有5大核心竞争力的华为云GaussDB,成SACC2021最靓那一个…

华为云开发者联盟

数据库 华为云 GaussDB 存算分离 GaussDB(for Redis)

高并发调优backlog多大合适?

运维研习社

nginx 运维 5月日更 并发调优

父母为什么催婚,而你又在逃避什么

小天同学

婚姻 爱情 5月日更

Windows Terminal 安装和运行

HoneyMoose

“为爱而生 温暖陪伴”——2021年中国洗地机行业发展峰会圆满落幕

DT极客

关于OpenHarmony 2.0共建进展

罗燕珊

开源 鸿蒙 OpenHarmony

融云2021 X-Meetup技术沙龙 探讨音视频技术新方向

融云 RongCloud

这一次,彻底搞懂 Go Cond

HHFCodeRv

Go 语言

Hadoop定位问题日志跟踪

InfoQ_Springup

hadoop

CMMI V2.0丨如何通过CMMI真正在企业中的实施规模化敏捷开发

IPD产品研发管理

软件 研发管理 CMMI

Windows 任务管理器中如何显示 CPU 逻辑处理器情况

HoneyMoose

珠联壁合地设天造|M1 Mac os(Apple Silicon)基于vscode(arm64)配置搭建Java开发环境(集成web框架Springboot)

刘悦的技术博客

Java vscode spring Boot Starter JDK11 m1

Golang function

escray

学习 极客时间 Go 语言 5月日更

从技术趋势看质量赋能

BY林子

敏捷 软件测试 质量赋能

微软 WSL 重装操作系统

HoneyMoose

Pulumi 如何在 Windows 环境中设置

HoneyMoose

Too many open files 的四种解决办法

ilinux

浪潮云洲链斩获2020-2021年度新一代信息技术创新产品殊荣

中公、马士兵、千锋、拉勾入局,腾讯课堂“薪选”IT人才培养按下加速键

DT极客

并行文件存储和分布式 NFS 文件存储有何不同

焱融科技

容器 云原生 高性能 文件存储 技术博客

多方安全计算:隐私保护集合求交技术

华为云开发者联盟

数据集 PSI 隐私保护集合交集 可信 伪随机函数

高性能 JavaScriptの笔记(四)

空城机

JavaScript 大前端 5月日更

Nginx基础配置-反向代理

梁龙先森

nginx 大前端

聊聊dubbo协议

捉虫大师

5G进京 “赶考”记:“占得上、保持稳、体验优、信号好”四道考题,分别打几分?

脑极体

This BigData,Hadoop组成及生态

Simon郎

大数据 hdfs YARN hadoop3

520节日快乐

IT蜗壳-Tango

5月日更

❤【520特别祝福篇】愿有情人终成眷属,已成眷属爱情稳固

洛神灬殇

爱情 5月日更 520单身福利 520 单身福利

快成物流科技 x mPaaS | 小程序容器加持下的技术架构“提质增效”

蚂蚁集团移动开发平台 mPaaS

小程序 移动开发 mPaaS

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