阿里云「飞天发布时刻」2024来啦!新产品、新特性、新能力、新方案,等你来探~ 了解详情
写点什么

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

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

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

关注

评论 1 条评论

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

转行数据分析?你可能需要这块敲门砖!

博文视点Broadview

Nacos 多语言体系再添新员:首个 Rust 语言版本正式发布!

阿里巴巴云原生

阿里云 云原生 nacos

华为首发微存储新品,破解互联网海量数据高效存储难题

科技热闻

别再自己瞎写工具类了,Spring Boot 内置工具类应有尽有, 建议收藏!!

程序知音

Java spring springboot java面试 后端技术

【C语言】double 关键字

謓泽

11月月更

深入理解Metrics(四):Meters

冰心的小屋

Java metrics meters

用户+案例+认证+框架一键搞定,不愧是阿里最新Spring Security全栈笔记!

Java永远的神

Java 程序员 springsecurity java面试 安全框架

【解决方案】国产逆袭?基于国产 MCU 的网红筋膜枪方案分析

元器件秋姐

国产芯片 BLDC方案 BLDC应用 电机控制 元器件电商

深入理解Metrics(三):Histograms

冰心的小屋

Java metrics Histograms

全网首次公开!设计模式+代码+JVM调优,不愧是阿里Java性能优化核心原理全解手册

Java全栈架构师

程序员 程序人生 性能优化 后端 java面试

中软国际发力智联网自主创新 数智赋能千行百业

中软国际AIoT开发者社区

华为开发者大会2022 智联网

英特尔CEO出席2022世界互联网大会:五大超级技术力量释放数字时代全新可能

科技之家

一站式工业边缘数据采集处理与设备反控实践

EMQ映云科技

物联网 IoT neuron 11月月更 eKuiper

Linux下安装Python3.6.8(超级详细)

A-刘晨阳

Linux 运维 Python3 11月月更 pip3

前端leetcde算法面试套路之树

js2030code

JavaScript LeetCode

相约2023,高通公司宣布参加第六届进博会

科技热闻

前端leetcde算法面试套路之堆

js2030code

JavaScript LeetCode

Wallys//Qualcomm ipq4018/IPQ4028 Access Point /high power/Wireless Dual band 11AC Wave2 /Indoor industrial wifi5 router

wallysmeng

IPQ4018 IPQ4028

网站收录量与索引量有什么区别?

源字节1号

软件开发 小程序开发

【LeetCode】最长同值路径Java题解

Albert

算法 LeetCode 11月月更

slurm集群调度策略详解(1)-主调度

慕冰

Slurm 调度系统 主调度

Linux—nmap、nc命令 –网络探测工具和安全和端口扫描器

A-刘晨阳

Linux 运维 网络 11月月更

什么是双机热备?实现方式有哪些?

行云管家

高可用 ha 热备 双机热备

【收藏】锂电材料工厂设备日常保养评分标准

PreMaint

设备管理 设备日常保养

vivo鲁京辉:从体验到生态,守正创新,vivo隐私安全再升级

Geek_2d6073

推荐一份关于JDK实现&源码解读的经典著作,强烈建议Java程序员都看看

程序员小毕

程序员 程序人生 Java并发 后端 jdk源码

前端leetcde算法面试套路之二叉树

js2030code

JavaScript LeetCode

Linux—watch命令详解– 周期性执行命令

A-刘晨阳

Linux 运维 11月月更 周期性监控

赛况激烈!2022 OceanBase数据库大赛50强诞生

OceanBase 数据库

直播预告|AutoML Meetup V1 第四范式 & 百度 & AWS ,共探自动机器学习最佳实践

星策开源社区

人工智能 机器学习 百度 AWS 自动机器学习

生于云,长于云,华为云推动开发者数字化创新

科技热闻

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