【锁定直播】字节、华为云、阿里云等技术专家讨论如何将大模型接入 AIOps 解决实际问题,戳>>> 了解详情
写点什么

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

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

关注

评论

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

在实践中学习类型定义、类型覆盖、CSS Modules

小鑫同学

CSS typescript 前端 11月月更

优先级反转那些事儿

字节跳动终端技术

ios QoS 移动开发 优先级反转 turnstile

链表剖析及自己手撸"单链表"实现基本操作(初始化、增、删、改等)

C++后台开发

数据结构 链表 linux开发 Linux服务器开发 C++开发

亚马逊云科技云从业者加速训练营上线啦!

亚马逊云科技 (Amazon Web Services)

培训与认证

开发者问第五期

HMS Core

HMS Core

Java程序员的BAT面试之路:数据库事物特性及隔离级别,记得看看

钟奕礼

Java 程序员 java面试 java编程

电容的“通交流、阻直流”,一次讲清楚

元器件秋姐

元器件采购 元器件电商 电容 电容特性 电容知识

完全解析大数据中MapReduce的运行流程

好程序员IT教育

大数据 MapReduce Service

Java通讯录管理系统

我是一个茶壶

Java 11月月更 通讯录管理系统

牛啊!长这么大还是头一次见24W字的SpringBoot从入门到实战文档

程序知音

Java spring springboot java架构 后端技术

Kotlin函数声明与默认参数(Default argument)

子不语Any

android kotlin 11月月更

易观分析:2022年Q3中国跨境进口零售电商市场规模为1124.8亿元

易观分析

报告 跨境电商

人人都可以给想象插上翅膀(内含AI绘画教程)

鼎道智联

openai AI绘画 鼎道智联

龙蜥技术委员会主席杨勇:下一代操作系统展望

云布道师

开源 操作系统

【web 开发基础】PHP 中的递归函数 (38)

迷彩

递归 11月月更 PHP递归 递归函数

论文领读|基于 VQVAE 的长文本生成

澜舟孟子开源社区

人工智能

Spring 依赖注入有哪几种方式

千锋IT教育

项目管理软件有哪些?

优秀

项目管理软件

【web 开发基础】PHP使用自定义函数库 (39)

迷彩

web开发基础 11月月更 自定义函数 函数库引入 函数库

2022年10月中国网约车领域月度观察

易观分析

报告 网约车

Prometheus 监测 RocketMQ 最佳实践

阿里巴巴云原生

阿里云 RocketMQ 云原生 Prometheus

服务全球开发者!灵雀云与Ubuntu推出一体化云原生解决方案

York

容器 云原生 操作系统 开源生态

易观千帆 | 2022年10月银行APP月活跃用户规模盘点

易观分析

报告 手机银行

Kotlin函数和扩展(extension)

子不语Any

kotlin Andrdoid 11月月更

大数据培训应该怎么学习

小谷哥

Kotlin变量和属性

子不语Any

kotlin andiod 11月月更

超级自动化行业前景广阔——首个数字化转型国家标准发布:价值体系优化、创新和重构是数字化转型根本任务

九科Ninetech

记一次HBASE的故障分析和排查过程

鲸品堂

大数据 11月月更

Kotlin类声明和构造器(constructor)

子不语Any

android kotlin 11月月更

APISIX Ingress 是如何支持上千个 Pod 副本的应用

API7.ai 技术团队

Kubernetes 容器 api 网关 APISIX

Pycharm 搭建 Django 项目

千锋IT教育

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