写点什么

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

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

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

关注

评论 1 条评论

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

国内低代码产品是如何定位的?这3类,企业可自行对号入座

优秀

低代码

JavaScript 中数组 sort() 方法的基本使用

编程三昧

JavaScript 大前端 数组 排序 js

阿里都会问些什么?4面阿里余额宝Java高级技术岗

Java架构师迁哥

全过程智慧教育,看北京四中网校和亚马逊云科技如何实现?| 精选案例

亚马逊云科技 (Amazon Web Services)

为什么说产品经理也要学点技术?

LigaAI

产品经理 研发管理 技术团队 产品设计与思考

5W1H聊开源之What——开源协议有哪些?

禅道项目管理

开源

iOS开发-Objective-C 中的 MVVM 模式介绍

iOSer

ios objective-c MVVM ios开发

别乱打日志了,这才是正确的打日志姿势!

xcbeyond

日志 规范 6月日更

人人视频被迫下架:打击盗版视频网站任重道远

石头IT视角

加快技术应用规模化 建设世界先进水平区块链产业生态

CECBC

Java--JVM运行流程

是老郭啊

Java JVM JVM原理

上云就上百度智能云,百度智能计算峰会召开,AI原生云全新升级

百度大脑

AI 智能云 峰会

大陆集团携手亚马逊云科技打造创新的汽车软件平台

亚马逊云科技 (Amazon Web Services)

HTTPS协议

IT视界

🏆【声网 Agora】「PC端实现实时语音通讯4.x」

码界西柚

WebRTC RTC征文大赛 声网 6月日更

学妹问,学网站开发还是打 ACM?

程序员鱼皮

Java 程序员 算法 大前端 ACM

聚焦机器同传前沿进展,第二届机器同传研讨会将在NAACL举办

百度大脑

人工智能 机器

从底层原理出发,了解Linux内核之内存管理

Linux服务器开发

后端 操作系统 内存管理 Linux内核 底层原理

探讨AI人才培养新思路,2021北京智源大会百度AI人才培养论坛召开

百度大脑

AI 人才培养

区块链+金融:当前区块链应用场景中最具活力的领域

CECBC

即时通讯系列-WorkPlus简介

BeeWorks

开源 即时通讯 IM 办公自动化

深度剖析:Redis分布式锁到底安全吗?看完这篇文章彻底懂了!

Kaito

redis zookeeper 分布式 后端

《原则》(八)

Changing Lin

6月日更

项目管理与项目集管理、项目组合管理的区别?

万事ONES

项目管理 项目 PMO ONES

软件研发团队如何做好项目进度管理?

万事ONES

项目管理 研发管理 需求 ONES

本科毕业六年,备战一个月,四面阿里巴巴定级P7

Java架构师迁哥

不愧是清华大佬,一个联机对战游戏就把23种设计模式给抽丝剥茧了

Java架构师迁哥

给你一直尝试和创新的机会!走进亚马逊云科技MRC团队

亚马逊云科技 (Amazon Web Services)

限流篇,欣赏阿里开源Sentinel

下雨喽

架构 设计 sentinel 限流

不管是三胎还是App!指望“拉新”太难了,还是要靠老用户!

APP开发

分布式认知工业互联网如何赋能工业企业数字化转型?

CECBC

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