写点什么

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

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

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

关注

评论 1 条评论

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

书画家点赞!基于飞桨绘制中国水墨山水画

飞桨PaddlePaddle

人工智能 paddle 飞桨 百度飞桨 AIGC

灵活预算,畅享高性能!月付香港主机助你建设理想网站!

一只扑棱蛾子

香港主机

一文了解什么是ISO 9001认证,以及在静态分析和代码质量领域有哪些通过此认证的工具

龙智—DevSecOps解决方案

代码扫描 静态代码分析 代码分析

Leangoo领歌敏捷工具提供哪些Scrum敏捷培训?

顿顿顿

敏捷开发 敏捷开发管理工具 scrum工具 scrum培训 敏捷培训

常用语言的线程模型(Java、go、C++、python3) | 京东云技术团队

京东科技开发者

Java c++ Go 线程模型 企业号 7 月 PK 榜

龙蜥社区首次突破!高性能存储 SIG 现身 LSF/MM/BPF 2023 分享 EROFS 的演进路线

OpenAnolis小助手

开源 高性能存储 龙蜥社区 sig EROFS

手机直播app源码部署搭建:带货潮流,商城功能!——山东布谷科技创作

山东布谷科技

软件开发 直播 源码搭建 直播APP源码 手机直播源码

Nautilus Chain NautDID NFT 将上主网,Layer3 数字身份时代开启

西柚子

NFTScan | 07.10~07.16 NFT 市场热点汇总

NFT Research

NFT\

等保定级标准是怎样的?是否系统定级越低越好?

行云管家

网络安全 等保 堡垒机 等级

运输车辆超时停车预警难?TDengine 流式计算助力吉科软轻松解决

爱倒腾的程序员

数据库

IPD(集成产品开发)跟敏捷、DevOps一样吗?有什么区别?

禅道项目管理

DevOps 敏捷开发 IPD

程序员「求生宝典」!AI大发展下的程序员求生指南,干货满满

Openlab_cosmoplat

含CPU芯片的PCB可制造性设计问题详解

华秋PCB

工具 芯片 PCB PCB设计 可制造性

等保测评包过是真的吗?安全吗?

行云管家

等保 等级保护 等保测评

应对618、双十一等大促期间的高负载,API性能测试应该怎么做?负载测试、基线测试、冒烟测试、浸泡测试、峰值测试和尖峰测试详解

龙智—DevSecOps解决方案

自动化测试 API 测试自动化

如何使用openEuler WSL sideload

openEuler

Linux 前端 操作系统 wsl openEuler

华为云云原生数据库,让企业离应用更进一步

华为云开发者联盟

数据库 后端 华为云 华为云开发者联盟 企业号 7 月 PK 榜

七年老程序员的五六月总结:十一件有意义的事

拭心

android 程序员 程序人生 成长记录

识别led显示屏扫描方式及常见分类指南

Dylan

分类 识别 扫描 LED显示屏

Seal AppManager如何基于Terraform简化基础设施管理

SEAL安全

Kubernetes Terraform 平台工程 SealAppManager 企业号 7 月 PK 榜

如何学习ABAQUS有限元仿真分析软件

思茂信息

abaqus abaqus软件 abaqus有限元仿真 有限元分析 有限元仿真

基于ClickHouse解决活动海量数据问题 | 京东云技术团队

京东科技开发者

数据库 Clickhouse 数据处理 企业号 7 月 PK 榜

大语言模型评估全解:评估流程、评估方法及常见问题

Baihai IDP

人工智能 白海科技 LLMOps 大模型评估 企业号 7 月 PK 榜

带你掌握利用Terraform不同数据源扩展应用场景

华为云开发者联盟

开发 华为云 华为云开发者联盟 企业号 7 月 PK 榜

任务调度之时间轮实现 | 京东云技术团队

京东科技开发者

定时任务 数据结构与算法 时间轮 企业号 7 月 PK 榜

从TL、ITL到TTL | 京东物流技术团队

京东科技开发者

ThreadLocal ThreadLocalMap 企业号 7 月 PK 榜

WorkPlus AI助理:结合ChatGPT对话能力与企业数据,助力企业级AI构建!

BeeWorks

火山引擎DataLeap如何解决SLA治理难题(一):应用场景与核心概念介绍

字节跳动数据平台

数据中台 数据治理 SLA 数据研发 企业号 7 月 PK 榜

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