DDD学习笔录——领域驱动设计的常见误区(即错误的理解)

可以将DDD看成一种开发思想体系;它促成了一种新的以领域为中心的思维方式。

它是一种学习过程,而非最终目标,这就是DDD的最大优势。

任何团队都可以编写一个软件来满足一组用例的需求,但那些将时间和精力花在其正在处理的问题域中的团队则能够持续演化产品以满足新的业务用例。

DDD本身并非一种严格的方法论,而是必须与一些迭代式软件项目方法论结合使用以构建并演化一个有用的模型。

由此可见下面的这些理解,存在很大的误区:

1、战术模式是DDD的关键

这明显不对,DDD并不是一种面向对象的设计,也不是一种以代码为中心的思想体系或者模式语言。

DDD与其说是软件设计模式 不如说是通过协作来解决问题的方法。其目的并非编写优雅的代码。

软件不过是DDD的一个构件而已。

2、DDD是一套框架

这一点可能我们现在也是这么错的理解的。那为何说它不是一套具体的框架呢?

DDD不需要一套特殊的框架或数据库。代码中实现的模型遵循POCO(纯老式的C#对象)原则,该原则确保模型完全没有任何基础代码以便不会出现干扰其以领域为中心的目的。虽然面向对象的方法论对于模型构造很有用,但这绝不是强制性的。

DDD在架构上具有不可知性,因为不存在你必须遵循的固定单一的架构样式以实现它。Evans的文章中介绍了一种分层架构样式,但这并非唯一的选项。架构样式可以变化,因为它们应该在有界上下文级别应用,而非应用程序级别。

3、DDD是一颗灵丹妙药

我本以为DDD可以让我成为大神,显然我要失望了,但还是要学完,至少不是毒药。

DDD可能需要付出大量努力,它需要迭代式开发方法论,以业务为向导以及聪明的开发人员。

所有的软件项目都能从DDD的分析实际中获益(例如提炼问题域),也能从战略模式中获益(例如分离一个表示领域逻辑的代码模型)。不过,并非所有软件项目都需要DDD的战术模式来构建一个富领域模型。寻常的领域不需要先进复杂的模型,因为她们只有很少或者没有领域逻辑。

时间: 2024-08-02 23:06:54

DDD学习笔录——领域驱动设计的常见误区(即错误的理解)的相关文章

关于领域驱动设计与GIT的优势的个人理解

注:本文系作者原创,但可随意转载. 本文纯属个人观点,才疏学浅,不当之处,敬请斧正. 一.领域驱动设计 经常看到大家在讨论这个问题,百度一下也能看到很多相关博客.本身我并没有阅读过相关的书籍,只是百度过一些概念之类的,可能并没有真正地理解这个概念. 首先,领域驱动设计的核心是模型,在于建立一个领域模型.对于这个概念还是深表认同.我认为领域驱动设计的目的,本身即是为了便于理解,加快开发.领域模型即是对客观事实进行建模,而不是基于抽象,那么所建立的模型通俗易读,阅读代码的人一看就知道是什么意思. 举

【华为云技术分享】如何设计高质量软件-领域驱动设计DDD(Domain-Driven Design)学习心得

DDD做为软件设计方法于2004年提出,一直不温不火,最近几年突然火起来了,为啥呢?正所谓机会给有准备的人,因为微服务的流行,大家都跃跃欲试把传统单体软件转成微服务架构,但理论很丰满,现实很骨感,光是分解微服务就让人找不到北,而DDD是歪打正着也好,富有远见也好,正好适合微服务转型设计,不火都难. 最近学习了领域驱动设计(Domain-Driven Design),感觉受益匪浅,那到底啥是DDD呢?这里分享一下学习心得.网上有很多详细的资料,感兴趣可以看看这个https://www.infoq.

领域驱动设计学习笔记

最近学习了领域驱动设计,基本上熟悉了领域驱动的一些基本术语以及一些分析的方法,并结合了实际的开发架构.基本的概念是通过<领域驱动设计:软件核心复杂性应对之道>这本书来进行学习的,里面详细讲解了领域驱动的一些基本概念以及领域驱动的多个设计模式,如果想对领域驱动进行深入学习的话,这本书是一个不错的基础. 有了基本的概念之后,为了与实际的开发进行结合,我还阅读了<领域驱动设计C# 2008实现问题.设计.解决方案>.这本书作者通过实际的项目来展开讲解的,前面几章根据领域驱动的概念设计了领

微服务架构设计基础之领域驱动设计

DDD早于微服务「出道」十年,这两个「忘年交」的软件设计哲学是如何相爱相杀的? 背景 微服务现在可以说是软件研发领域无人不提的话题,然而业界流行的对比多数都是所谓的Monolithic(单体应用),而大量的系统在十几年前都已经是以SOA(面向服务架构)为基础的分布式系统了,那么微服务作为新的架构标准与SOA有什么差异点呢?其本质区别在于设计原理,微服务是去中心化设计,SOA是「集成」形成中心设计: 另外,笔者认为以下几点并不是微服务和SOA的区别点: CI/CD:持续集成.持续部署本身与敏捷.D

领域驱动设计系列:澄清一些基础概念

要研究DDD,必须认清DDD的核心是通用语言和模型驱动设计.即使是DDDLite(技术上的DDD),也必须清楚DDD在架构中的位置和必须的架构知识,否则一路跑到哪里能否回来都是未知了.我们先了解常用架构分层,再了解DDD的所在层次和范畴,然后强调DDD的核心.包括从架构到领域模型设计方面的决策和自己的些许实践. 1.三层作为基础:表示层.业务逻辑层.数据访问层是所有讨论的基础.有2个最重要的决策和实践等待你应用和发现: (1)在假设存在多个表示层的基础上,你可以据此将分散在表示层中的业务逻辑代码

领域驱动设计案例之领域层框架搭建

根据前面对领域驱动设计概念以及一些最佳实践的理解,领域模型是系统最核心的部分,我们还是采用前面销售订单的例子,这个案例系统的核心构建就从领域层开始.领域层框架搭建主要完成两个任务: 1.领域模型的建立,聚合与聚合根的确定,关系的确定. 2.建立支持DDD理论的领域层接口. 这里先上代码图,再详细讲每个部分的主要功能: 1.Model中主要确定了领域对象,聚合与聚合根,关联关系等,我们这里采用的是EF 的Model First建模,你也可以采取Code First.如下图: 2.Aggreate中

分享我对领域驱动设计(DDD)的学习成果

本文内容提要: 1. 领域驱动设计之领域模型 2. 为什么建立一个领域模型是重要的 3. 领域通用语言(Ubiquitous Language) 4.将领域模型转换为代码实现的最佳实践 5. 领域建模时思考问题的角度 6.领域驱动设计的标准分层架构 7. 领域驱动设计过程中使用的模式 关联的设计 实体(Entity) 值对象(Value Object) 领域服务(Domain Service) 聚合及聚合根(Aggregate,Aggregate Root) 工厂(Factory) 仓储(Rep

学习:DDD领域驱动设计

DDD:Domain-driven Design(领域 - 驱动 -> 设计) ->领域驱动领域模型设计 ->领域模型驱动代码实现 摘自网络(汤雪华的博客) <概念总结> 领域就是问题域,有边界,领域中有很多问题: 任何一个系统要解决的那个大问题都对应一个领域: 通过建立领域模型来解决领域中的核心问题,模型驱动的思想: 领域建模的目标针对我们在领域中所关心的问题,即只针对核心关注点,而不是整个领域中的所有问题: 领域模型在设计时应考虑一定的抽象性.通用性,以及复用价值: 通过

DDD领域驱动设计基本理论知识总结

领域驱动设计之领域模型 加一个导航,关于如何设计聚合的详细思考,见这篇文章. 2004年Eric Evans 发表Domain-Driven Design –Tackling Complexity in the Heart of Software (领域驱动设计),简称Evans DDD.领域驱动设计分为两个阶段: 以一种领域专家.设计人员.开发人员都能理解的通用语言作为相互交流的工具,在交流的过程中发现领域概念,然后将这些概念设计成一个领域模型:由领域模型驱动软件设计,用代码来实现该领域模型: