10 月 23 - 25 日,QCon 上海站即将召开,现在购票,享9折优惠 了解详情
写点什么

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

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

关注

评论

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

Swoole中的协程使用相关说明,快来围观

CRMEB

揭秘华为云GaussDB(for Influx):最佳实践之数据建模

华为云开发者联盟

MySQL 数据建模 数据模型 华为云 GaussDB(for Influx)

大数据培训学习程序员有必要吗

@零度

大数据开发

培训学习选择java好还是前端好

@零度

JAVA开发 web前端

【阿里云大咖说】填问卷送好礼正式上线,快来参与吧!

大咖说

大咖说 问卷 礼品

眼见不一定为实:调用链HBase倾斜修复

捉虫大师

HBase 数据倾斜 4月月更

为安全而生!浪潮云参编的《数据安全法》实施参考(第一版)重磅发布

云安全

双许可、先决条件、附加条款……开源许可证的疑难杂问

一君

活动预告 | 洞见科技纪凯受邀出席「隐私计算应用与发展论坛」

洞见科技

Hoo虎符研究院|Cradle调研报告

区块链前沿News

虎符 Hoo 虎符研究院

Go单体服务开发最佳实践

万俊峰Kevin

微服务 单体架构 web开发 go-zero Go 语言

源码解析Synchronous Queue 这种特立独行的队列

华为云开发者联盟

MQ 堆栈 队列 Synchronous Queue 公平队列

javaScript深拷贝和浅拷贝简单梳理

程序猿布欧

JavaScript 前端 深拷贝 浅拷贝 深拷贝与浅拷贝

《数字经济全景白皮书》Z世代用户洞察篇(3)重磅发布!

易观分析

用户分析 Z世代

一文详解Java日志框架JUL

华为云开发者联盟

Java 日志 框架 日志框架 JUL

JavaScript的事件循环机制浅析

程序猿布欧

JavaScript 前端 前端面试 防抖节流

英特尔分享进军独显市场的背后思考

科技新消息

企评家,助力创业板企业成长性评价

企评家

企业评价 企业大数据 创业板 评价维度 成长性

在MAUI中使用Masa Blazor

MASA技术团队

C# .net 微软 组件 组件库

什么是敏捷开发,敏捷开发落地指南之迭代排期

阿里云云效

云计算 阿里云 敏捷开发 研发 研发敏捷

这是一个有关自律的复杂故事

Coffee Cat

数据分析 监控 自律 跑步 可观测

BIGO 的数据管理与应用实践

NebulaGraph

数据库 图数据库 数据管理

EasyCV开源|开箱即用的视觉自监督+Transformer算法库

阿里云大数据AI技术

算法 计算机视觉 开源技术

知识管理:新时代企业竞争力核心

小炮

企业知识管理 企业知识管理工具

【易安联】安全都是有边界的,零信任也不例外

极客天地

“一个扫描枪一张表”,韵达选择 TDengine 应对每日亿级数据量

TDengine

数据库 tdengine

想参加培训学习web前端不知道靠不靠谱

@零度

web前端开发

OpenHarmony 技术日直播回顾丨共建新技术,开拓新领域

OpenHarmony开发者

OpenHarmony 技术日

宣布 Databricks 支持 Amazon Graviton2,性价比提高 3 倍

亚马逊云科技 (Amazon Web Services)

Tech 专栏

新零售SaaS架构:组织管理的底层逻辑与架构设计

AI架构师汤师爷

系统架构 SaaS 架构设计 组织架构

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