写点什么

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

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

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

关注

评论 1 条评论

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

10.2微服务:落地实践的策略与思路

张荣召

多线程源码明白了吗?不明白的话来看腾讯大牛给你画的面试重点

小Q

Java 学习 架构 面试 线程

区块链技术赋能信息通信行业信用监管

CECBC

区块链 信用

如何应对Spark-Redis行海量数据插入、查询作业时碰到的问题

华为云开发者联盟

数据库 redis spark 开源 数据

食堂就餐卡系统UML设计

简简单单

架构师训练营-week10

睁眼看世界

极客大学架构师训练营

学习总结--week10

张荣召

【Java基础】-- isAssignableFrom的用法详细解析

秦怀杂货店

Java 关键字

阿里要求其内部程序员必须精通的并发编程笔记:原理+模式+应用

Java架构追梦

阿里巴巴 编程 面试 并发 java架构

架构师训练营第十周课后作业

Gosling

极客大学架构师训练营

美团Java面试一轮游,太激烈了,问啥啥不会,我该怎么办?

比伯

Java 编程 架构 面试 计算机

C语言常用错误代码释义大全,让你编译运行报错不是烦恼

ShenDu_Linux

编译原理 常见错误

Mybatis【4】-- 关于Mybatis别名定义

秦怀杂货店

Java mybatis

数仓搬迁:从方法到实践,带你解决数据一致性对比

华为云开发者联盟

数据仓库 数据 存储 数据校验 搬迁

Linux IO模式及 select、poll、epoll详解(含部分实例源码)

linux大本营

c++ Linux 后台开发 异步IO epoll

Mybatis【2.2】-- Mybatis关于创建SqlSession源码分析的几点疑问?

秦怀杂货店

Java 数据库 mybatis

10.1微服务:服务本身的设计,维护及治理

张荣召

和同事交流不会kafka怎么行,API奉上,不是大神也能编

小Q

Java 学习 架构 面试

让“数字鸿沟”变为“数字通途”

CECBC

数字化时代 支付产品

架构师训练营第 10 周作业

netspecial

极客大学架构师训练营

10.3微服务网关的技术架构

张荣召

10.4领域驱动设计DDD

张荣召

JDBC【4】-- SPI底层原理解析

秦怀杂货店

Java 源码 spi

区块链创新中国价值链

CECBC

区块链

架构师训练营3期第一周学习总结

简简单单

架构师训练营第十周学习总结

Gosling

极客大学架构师训练营

Mybatis【2.3】-- Mybatis一定要使用commit才能成功修改数据么?

秦怀杂货店

Java 数据库 mybatis

10.7作业

张荣召

Mybatis【3】-- Mybatis使用工具类读取配置文件以及从属性读取DB信息

秦怀杂货店

Java 数据库 mybatis

10.5软件组件设计原则

张荣召

年轻人,学好Nginx,走遍天下都不怕

程序员小灰

c++ nginx Linux 服务器 架构师

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