在 2025 收官前,看清 Data + AI 的真实走向,点击查看 BUILD 大会精华版 了解详情
写点什么

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

  • 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:194512
用户头像

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

关注

评论 1 条评论

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

【YashanDB知识库】透明故障转移配置指导

YashanDB

数据库 yashandb

2025 年最值得关注的 8 大数据复制工具

tapdata

灾备 数据复制 实时数据 数据复制工具 fivetran

AI口语练习APP的性能优化

北京木奇移动技术有限公司

软件外包公司 AI口语练习 AI英语学习

如何查看商品销量 API 接口的性能指标数据

科普小能手

数据挖掘 数据分析 电商 解决办法 API 接口

广告发布平台(源码+文档+部署+讲解)

深圳亥时科技

【YashanDB知识库】归档日志清理

YashanDB

数据库 yashandb

2025年中国(深圳)国际移动消费电子及产品展会

秋硕展览

AI口语评测APP上线注意事项

北京木奇移动技术有限公司

软件外包公司 AI口语测试 AI英语学习

【YashanDB知识库】备库扩缩容指导

YashanDB

数据库 yashandb

【YashanDB知识库】非YCM方式的自动备份方案示例

YashanDB

数据库 yashandb

NocoBase 本周更新汇总:改进文件存储扩展

NocoBase

开源 低代码 插件 无代码 版本更新

请查收| 京东零售技术AI领域前沿探索-10篇顶会论文合集

京东科技开发者

【YashanDB知识库】通过导入导出修改用户名称

YashanDB

数据库

【YashanDB知识库】字符集latin1的MySQL中文数据如何迁移到YashanDB

YashanDB

yashandb

AI如何帮助解决生活中的琐碎难题?

天津汇柏科技有限公司

AI 人工智能

AI口语陪练APP的关键技术

北京木奇移动技术有限公司

软件外包公司 AI英语学习 AI口语学习

腾讯云 AI 代码助手: Codebase 本地工程检索

CodeBuddy

少儿英语系统(源码+文档+部署+讲解)

深圳亥时科技

【YashanDB知识库】YCM数据库托管遇到的问题

YashanDB

数据库

【YashanDB知识库】MySQL的FIND_IN_SET如何在YashanDB改写

YashanDB

数据库 yashandb

@所有人 坚持长期价值创造,智启数字未来!

赛博威科技

数字化 数字营销 赛博威

Locks, Actors, And Stm In Pictures

werbenhu

actor

AI口语练习APP的场景测试

北京木奇移动技术有限公司

软件外包公司 AI口语练习 AI英语学习

【Abyss】Android平台BPF和SECCOMP的SVC指令拦截

iofomo

android 虚拟化技术 拦截

1688店铺所有商品列表接口系列(1688 API)

tbapi

1688API 1688店铺所有商品接口

【YashanDB知识库】私有maven使用崖山JDBC驱动

YashanDB

数据库 yashandb

Aloudata CAN 荣登 CSDN 2024 中国开发者影响力年度「创新产品与解决方案」榜单

Aloudata

数据分析 数据指标 指标平台 noetl

碾压 OpenAI,DeepSeek-R1 发布!如何在本地实现 DeepSeek?

智领云科技

openai DeepSeek DeepSeek v3

培训讲师管理系统(源码+文档+部署+讲解)

深圳亥时科技

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