写点什么

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

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

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

关注

评论 1 条评论

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

Python语法之数据类型

芯动大师

Python 数据类型 9月月更

Flomesh 多租户 Ingress Controller

Flomesh

Service Mesh 服务网格

ScrumMaster可不是项目经理!

ShineScrum

Scrum ScrumMaster 项目经理

NGINX 的未来:回到开源的初心

NGINX开源社区

nginx Kubernetes nginx 开源版 NGINX Kubernetes Gateway NGINX Amplify

通过爬虫爬取一些图片

吉师职业混子

9月月更

《简单记个笔记》之部分CSS选择器介绍

吉师职业混子

9月月更

面对全新的编程语言,这些思路可以帮助你察觉漏洞

网络安全学海

黑客 网络安全 信息安全 渗透测试 漏洞利用

高并发之负载均衡

源字节1号

软件开发

Qt|ListWidget控件总结

中国好公民st

List qt 9月月更

Chrome操作指南——入门篇(六)console.injector

Augus

Chrome开发者工具 9月月更

MASA MAUI Plugin 安卓蓝牙低功耗(一)蓝牙扫描

MASA技术团队

.net MASA MAUI Xamarin

Orbeon form 的安装和使用教程

汪子熙

typescript SAP Hybris form 9月月更

如何用AR Engine开发一个虚拟形象表情包?

HarmonyOS SDK

AR

2022-09-19:给定字符串 S and T,找出 S 中最短的(连续)子串 W ,使得 T 是 W 的 子序列 。 如果 S 中没有窗口可以包含 T 中的所有字符,返回空字符串 ““。 如果有不

福大大架构师每日一题

算法 rust 福大大

【字符串函数内功修炼】strlen + strstr + strtok + strerror(三)

Albert Edison

C语言 9月月更 strlen strstr strtok

挑战30天学完Python:Day3夯实基础-布尔值和运算符

MegaQi

9月月更 挑战30天学完Python

Chrome操作指南——入门篇(七)console中的await和log

Augus

Chrome开发者工具 9月月更

Python教程之Python简介

芯动大师

编程语言 9月月更 Python简介

在windows电脑上配置kubectl远程操作kubernetes

程序员欣宸

Kubernetes 9月月更

Chrome操作指南——入门篇(五)Snippets

Augus

Chrome开发者工具 9月月更

OKR之剑·理念篇02: OKR布道之旅

vivo互联网技术

团队管理 OKR 目标管理

Python 教程之变量

芯动大师

变量 9月月更 Python语法

那些你不知道的炫酷按钮交互效果

南城FE

CSS 前端 动画 交互设计 按钮

行业方案|“机场”行业智能运维解决方案介绍

云智慧AIOps社区

解决方案 智能运维 运维管理 智能运维AIOps 监控安全

本周预告:资深架构师解读多架构体系下的内核与系统开发等技术演讲 | 第47-48期

OpenAnolis小助手

开源 ebpf sig 龙蜥大讲堂 普华

史上最详细vue的入门基础

楠羽

Vue 笔记 9月月更

PLG SaaS 产品 Figma 商业模式拆解

程序员泥瓦匠

SaaS

[极致用户体验] 多页面应用里,「网页内返回」按钮,何时用 history.back 何时用 replaceState?

HullQin

CSS JavaScript html 前端 9月月更

Hinton等谈深度学习十年;PyTorch落地Linux基金会的影响;机器学习界的“GitHub”|AI系统前沿动态

OneFlow

人工智能

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