写点什么

从数据驱动开发到领域驱动设计的经验

  • 2013-10-18
  • 本文字数:840 字

    阅读完需:约 3 分钟

Julie Lerman 对于领域驱动设计(DDD)深感着迷并且倍受启发,但在数据驱动开发方面的长期经历,使她在理解如何在 DDD 中使用自己技能的道路上,不断的挣扎、争论又满腹辛酸。Julie 自 2003 年起成为微软MVP ,作为顾问和导师从事.NET 平台方面的工作。她认为,或许由许多开发者都遭受了同样的痛苦,因此在MSDN 杂志上撰写了三篇文章来分享她所学到的经验教训。

Julie 强调,DDD 适用于复杂行为——并不是应用的每个部分都会包含这样的问题。对于应用中仅仅涉及简单的创建、读取、更新和删除(CRUD)的部分,我们或许最好采用非 DDD 的实现方式,但对于复杂行为和 CRUD 的结合部分,Julie 建议识别出复杂部分,并将其分解为独立的有界上下文,并对它们运用 DDD。

当进入 DDD 并对某个领域建模的时候,Julie 会聚焦于业务,研究所需的任务和行为。数据持久性与业务问题无关,因此它应该扮演支持的角色,而不是去干预领域设计。

Julie 遇到的那些麻烦中的一个主题,是在子系统之间分享类型和数据。在她看来,分享类型一直是强制性的,对同一个数据库中的相同表进行操作也是如此。DDD 让她学到,不分享某个领域模型也可能是完全没问题的,因此可以将来自不同子系统的数据的相同类型,存储在不同的表和数据库中。复制数据并不是一种过错,从长期来看,由于移除了分享数据的复杂性,这或许会简化我们的系统。

在她最后一部分分享中,Julie 讨论了一些使用 ORM 工具的过程中出现的问题——她使用的是实体框架。其中一个问题是单向关系,这是使用DDD 时的首选关联方式。最初的 DDD 书籍作者 Eric Evans 的建议是,“尽可能地约束关系是非常重要的”。对 Julie 来说,自打开始使用实体框架以来,双向关系一直是一项规范。然而现在她发觉,尽管双向关系很方便,但在领域中鲜有实际需求,而省去双向关系将会移除关系管理中的部分复杂性。

Julie 的文章还给出了一段用 C#和实体框架(微软用于.NET 平台的对象关系映射工具)编写的例子。

查看英文原文: Experiences Going From Data-Driven Development to Domain-Driven Design

2013-10-18 02:194489
用户头像

发布了 256 篇内容, 共 87.8 次阅读, 收获喜欢 10 次。

关注

评论 1 条评论

发布
用户头像
不知所云
2019-08-01 09:32
回复
没有更多了
发现更多内容

MySQL 数据同步至 S3file,并接入 Hive 访问:SeaTunnel 实践指南

白鲸开源

MySQL hive Doris 数据同步 Apache SeaTunnel

了解案例共创活动

华为云开发者联盟

垃圾回收算法有哪些?了解哪些垃圾回收器?

不在线第一只蜗牛

Java 算法 JVM

龙蜥中级认证课程上线,Linux 技术进阶新选择

OpenAnolis小助手

Linux 操作系统 龙蜥社区人才培养计划

VMware Cloud Foundation Operations 9.0 新增功能

sysin

vcf

【IoTDB 线上小课 17】开源 ≠ 免费,3 分钟总结开源商用指南

Apache IoTDB

VMware Cloud Foundation Automation 9.0 新增功能

sysin

vcf

PostgreSQL 数据库中 ETL 操作的实战技巧

谷云科技RestCloud

数据库 postgresql 数据处理 ETL 数据集成

智野双全一车搞定 豪华智能越野“第一车”即将发布

极客天地

龙蜥牵手如意 RISC-V 社区,共筑 RISC-V 软件生态新未来

OpenAnolis小助手

开源 操作系统 risc-v 龙蜥社区

自 4O 之后,Voice 从 Assistant 到 Agent,新机会都藏在哪些场景里?|Voice Agent 学习笔记

RTE开发者社区

回看限时上线!2025 Altair 区域技术交流会精彩演讲回播来啦

Altair RapidMiner

人工智能 AI 仿真 CAE 航空航天

10+热门 AI Agent 框架深度解析:谁更适合你的项目?

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

MiniMax 将完成近 3 亿美元融资,估值超 40 亿美元;Grok 上线动漫 AI 伴侣功能丨日报

RTE开发者社区

缓存穿透的解决方式?—布隆过滤器

量贩潮汐·WholesaleTide

缓存

阿里云 EMR Serverless Spark: 面向 Data+AI 的高性能 Lakehouse 产品

阿里云大数据AI技术

人工智能 大数据 spark Serverless 数据处理

在沈阳搞AI,嘎嘎好!

百度Geek说

倒计时 1 天!龙蜥邀您参加 RISC-V 中国峰会

OpenAnolis小助手

操作系统 risc-v 龙蜥社区 Anolis OS 龙蜥社区 RISC-V SIG

【重磅发布,限时下载】《WhaleStudio商业案例白皮书》上线,数智化转型最佳实践一次看全

白鲸开源

大数据 白皮书 DataOps 白鲸开源 商业案例

​​超越传统:低代码如何以敏捷开发+高效能撬动企业数智转型性价比天花板?​

电子尖叫食人鱼

低代码

DolphinScheduler 如何高效调度 AnalyticDB on Spark 作业?

白鲸开源

MySQL spark 开源 Apache DolphinScheduler analyticDB

Web前端入门:JavaScript 由程序触发绑定事件的几种方式

量贩潮汐·WholesaleTide

JavaScript 前端

给 DolphinScheduler 加一个 SQL Copilot 聊天助手,这个主意怎么样?

白鲸开源

GitHub 开源 AI Apache DolphinScheduler Copilot

达摩院玄铁、龙蜥等联合出题,首届 CIE 全国 RISC-V 高水平创新和应用大赛邀您报名

OpenAnolis小助手

操作系统 risc-v 龙蜥社区 龙蜥社区赛题

OASA 6 月月会圆满结束,同步联盟目标、漏洞激励计划等新进展

OpenAnolis小助手

开源 龙蜥社区 龙蜥社区安全联盟 软件适配

特斯拉Optimus V3,来了!!

机器人头条

特斯拉 人形机器人 宇树科技 智元机器人 特斯拉optimus

从论文提示词注入看智能体安全

冯骐

网络安全 智能体 大模型 SQL注入 提示词

亲测可用!麒麟环境下安装 SeaTunnel 完整指南

白鲸开源

Linux 开源 安装 麒麟操作系统 Apache SeaTunnel

阿里云 Serverless 重塑创蓝云智通信底座,引领行业变革!

阿里巴巴云原生

Serverless

从数据驱动开发到领域驱动设计的经验_语言 & 开发_Jan Stenberg_InfoQ精选文章