NVIDIA 初创加速计划,免费加速您的创业启动 了解详情
写点什么

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

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

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

关注

评论 1 条评论

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

Tuxera NTFS2024免费版NTFS磁盘读写软件

茶色酒

Tuxera NTFS2024

【Python实战】Python对中国500强排行榜数据进行可视化分析

BROKEN

三周年连更

当⻉借⼒阿⾥云落地云原⽣架构转型,运维降本、效率稳定性双升

阿里巴巴云原生

阿里云 云原生 云原生架构

【已结束】直播预告|传统 PvE 游戏 ∕ 开房间 PvP 游戏的云原生架构升级

阿里巴巴云原生

阿里云 云原生 游戏

为什么医疗保健需要MFT来帮助保护EHR文件传输

镭速

Sibelius2023免费版音乐制谱软件

茶色酒

Sibelius2023

CDR2023最新中文版下载安装详细教程

茶色酒

cdr2023

各行业常见的业务指标汇总(数据分析常用数据指标)

Data 探险实验室

数据分析 数据分析师 数据指标 指标中台; 数据分析 指标洞察

音视频八股文(4)--ffmpeg常见命令(3)

福大大架构师每日一题

音视频 ffmpeg

世界读书日|华为阅读联合40余家伙伴推出精品书单

最新动态

Docgeni 2.1 正式发布

PingCode研发中心

软件开发 Docgeni

2023年3月用户体验GX评测:国有行及股份行持续领跑,城商行及农商行农信社积极探索实践用户体验体系搭建

易观分析

金融 银行

算法刷题-移除元素、分数到小数、整数转罗马数字

共饮一杯无

数据结构 算法 三周年连更

Cloud Kernel SIG月度动态:发布 Anolis 8.8 镜像、kABI 社区共建流程

OpenAnolis小助手

镜像 龙蜥社区 sig kernel 月报

ChatGPT辅助编写自动化测试

QE_LAB

单元测试 自动化测试 接口测试 测试技术 ChatGPT

CnosDB成为首个支持sqllogictest的时序数据库,稳定性与可靠性再升级

CnosDB

数据库 开源 时序数据库 CnosDB

关于容器云的三种网络设计

穿过生命散发芬芳

容器云 三周年连更

今天,飞桨公众号六岁啦!

飞桨PaddlePaddle

飞桨PaddlePaddle

重构这件“小”事儿 | 得物技术

得物技术

【深入浅出Spring原理及实战】「源码调试分析」深入源码探索Spring底层框架的的refresh方法所出现的问题和异常

洛神灬殇

spring NPE 源码剖析 4月日更 问题分析

TypeScript Module

程序员海军

三周年连更

预训练对话大模型深度解读

轻口味

AI 大模型 三周年连更

使用 Kubectl Patch 命令更新资源

Se7en

云原生

新手如何学好Zbrush3D建模?

Finovy Cloud

3D软件

Django笔记十五之in查询及date日期相关过滤操作

Hunter熊

Python django 日期

百度平地起“雷”,突然爆出的QPS数据意味着什么?

脑极体

大模型

缓存的处理步骤

阿泽🧸

缓存 三周年连更

2022-04-23:给定你一个整数数组 nums 我们要将 nums 数组中的每个元素移动到 A 集合 或者 B 集合中 使得 A 集合和 B 集合不为空,并且 average(A) == aver

福大大架构师每日一题

golang 算法 rust

CorelDRAW Graphics Suite2023最新中文版下载

茶色酒

cdr2023

活动回顾|微服务x容器开源开发者 Meetup 成都站回放 & PPT 下载

阿里巴巴云原生

阿里云 开源 容器 微服务 云原生

基于 Amazon SageMaker 构建细粒度情感分析应用

亚马逊云科技 (Amazon Web Services)

机器学习 Amazon SageMaker

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