写点什么

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

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

关注

评论

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

软件测试 | 普罗米修斯 - 自定义exporter

测吧(北京)科技有限公司

测试

足不出户,搞定IoT设备故障诊断和恢复——实践类

阿里云AIoT

阿里云 物联网 IoT

安卓手机的网络权限,全网最全解答

神锁离线版

android 互联网 安卓 网络权限 安卓权限

存量设备 0 改造,平滑迁移阿里云 IoT 物联网平台最佳实践——实践类

阿里云AIoT

阿里云 物联网 IoT

软件测试 | 跨平台设备管理方案Selenium Grid

测吧(北京)科技有限公司

测试

Exposure2023绿色版本人像滤镜插件下载

茶色酒

Exposure2023

小程序与微服务架构如何进行结合

Onegun

小程序 微服务架构 移动开发

解决方案| anyRTC 融合其他厂商视频会议系统方案

anyRTC开发者

音视频 私有云 视频会议 视频通话 H.323

IoT生态构建:AIoT认证设备中心——实践类

阿里云AIoT

阿里云 物联网 IoT

Airserver2023免费手机投屏电脑工具

茶色酒

AirServer2023

前端刷完这12道滑动窗口,就可以出山面试了

js2030code

JavaScript LeetCode

软件测试 | 简历中应该如何描述才能体现出软技能的实力?

测吧(北京)科技有限公司

测试

FlagOpen大模型技术开源体系,开启大模型时代“新Linux”生态

硬科技星球

十五年,始吾心

博睿数据

可观测性 智能运维 博睿数据 15周年 品牌历史

OpenMLDB SQL 与标准 SQL 的主要差异

第四范式开发者社区

人工智能 机器学习 数据库 开源 特征

mysongbook2023吉他谱永久免费版

茶色酒

mysongbook2023

ONES 获得 SOC2 Type1 鉴证报告,数据安全能力受权威认可

万事ONES

ChatGPT“爆红”启示:工业AI如何掀起新型“工业革命”?

Openlab_cosmoplat

人工智能 开源 工业 智能制造 ChatGPT

一文读懂Vue开发小程序的技术原理

没有用户名丶

OpenMLDB 社区月报 | 2023 年 2 月

第四范式开发者社区

人工智能 机器学习 数据库 开源 特征

江苏鸿程大数据:基于鲲鹏DevKit开发数据报告生成平台,数据库查询效率提升30%

Geek_2d6073

API+DevOps:华为云API Arts一体化平台,端到端呵护您的API

科技怪授

API 华为云

PCB板漏孔、漏槽怎么办?看工程师避坑“SOP”

华秋PCB

PCB 电路板 PCB设计 钻孔

软件测试 | HTTPS 的通信加解密过程,证书为什么更安全?

测吧(北京)科技有限公司

测试

猫咪在逐步壮大--PUSS通证深度解析

股市老人

Camtasia 2023体验版有哪些新功能

茶色酒

Camtasia Studio2023

AntDB数据库首个社区版正式发布,携手生态更多可能

亚信AntDB数据库

AntDB 国产数据库 AntDB数据库 企业号 3 月 PK 榜

腾讯云助力河北打造人社一体化公共服务平台,显著提升治理能力和服务水平

科技热闻

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