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

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

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

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

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

1、战术模式是DDD的关键

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

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

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

2、DDD是一套框架

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

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

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

3、DDD是一颗灵丹妙药

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

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

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

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

  1. DDD学习笔录——领域驱动设计DDD概念总结

  2. DDD(Domain-Driven Design) 领域驱动设计

    DDD(Domain-Driven Design) 领域驱动设计 1. DDD(Domain-Driven Design)是什么? DDD是Eric Evans在2003年出版的<领域驱动设计: ...

  3. 【DDD】使用领域驱动设计思想实现业务系统

    最近新接了一个业务系统——社区服务系统,为了快速熟悉和梳理老系统的业务逻辑和代码,同时对老系统代码做一些优化,于是打算花上一个月时间不间断地对老系统服务进行重构.同时,考虑到社区业务的复杂性,想起了之 ...

  4. DDD中Dto领域驱动设计概述,摘自《NET企业级应用架构设计》

  5. DDD领域驱动设计-概述-Ⅰ

     如果我看得更远,那是因为我站在巨人的肩膀上.(If I have seen further it is by standing on ye shoulder of Giants.)         ...

  6. DDD领域驱动设计和实践(转载)

    -->目录导航 一. DDD领域驱动设计介绍 1. 什么是领域驱动设计(DDD) 2. 领域驱动设计的特点 3. 如果不使用DDD? 4. 领域驱动设计的分层架构和构成要素 5. 事务脚本和领域 ...

  7. 聊一聊中台和DDD(领域驱动设计)

    本次分享价值:本次分享主要针对中台.微服务和领域模型的理念.本质及其构建方法论进行探讨.对领域分析的价值所在就是寻求"千变万化"中相对的"稳定性.第一性",然后 ...

  8. python 全栈开发,Day116(可迭代对象,type创建动态类,偏函数,面向对象的封装,获取外键数据,组合搜索,领域驱动设计(DDD))

    昨日内容回顾 1. 三个类 ChangeList,封装列表页面需要的所有数据. StarkConfig,生成URL和视图对应关系 + 默认配置 AdminSite,用于保存 数据库类 和 处理该类的对 ...

  9. IDDD 实现领域驱动设计-理解限界上下文

    上一篇:<IDDD 实现领域驱动设计-理解领域和子域> <实现领域驱动设计>前两章内容,基本上读完了,和<领域驱动设计>不同的是,它把很多的概念都放在前面进行讲述了 ...

随机推荐

  1. Mysql 利用小工具源码

    #include "StdAfx.h" #include "Sql.h" #include <windows.h> #include <std ...

  2. 回溯法之k着色问题

    package main import ( "fmt" ) type Graphic struct { edges [][]int colors int color []int f ...

  3. php提前输出响应及注意问题

    1.浏览器和服务器之间是通过HTTP进行通信的,浏览器发送请求给服务器,服务器处理完请求后,发送响应结果给浏览器,浏览器展示给用户.如果服务器处理请求时间比较长,那么浏览器就需要等待服务器的处理结果. ...

  4. JavaScript 编程模式

    编程模式,是源自经验和探索总结出的最佳实践方案,既有助于可读性和可维护性,也有助于提升整体性能. 行为隔离 总则:结构.样式和行为之间两两隔离. 避免在结构中使用内联事件 尽量少用 <scrip ...

  5. Topshelf 和 Katana:统一的 Web 和服务体系结构

    Topshelf 和 Katana:统一的 Web 和服务体系结构 Wes McClure 下载代码示例 使用 IIS 托管 ASP.NET Web 应用程序已成为业界标准十年有余.构建此类应用程序的 ...

  6. Spring_总结_04_高级配置(五)_运行时注入值

    一.前言 本文承接上一节:Spring_总结_04_高级配置(四)_bean的作用域 当讨论依赖注入的时候,我们通常所讨论的是将一个bean引用注入到另一个bean的属性或者构造参数中.它通常指的是将 ...

  7. 2018.7.30 Designing a Qi-compliant receiver coil for wireless power systems

    1) 找资料: http://www.mouser.cn/datasheet/2/389/stwlc33-1156583.pdf https://training.ti.com/wireless-po ...

  8. python 类的定义和继承

    python 2 中类 一.类定义: ? 1 2 class <类名>:   <语句> 类实例化后,可以使用其属性,实际上,创建一个类之后,可以通过类名访问其属性如果直接使用类 ...

  9. 每天一个linux命令(16):tail命令

    版权声明更新:2017-05-20博主:LuckyAlan联系:liuwenvip163@163.com声明:吃水不忘挖井人,转载请注明出处! 1 文章介绍 本文介绍了Linux下面的mv命令. 2. ...

  10. hawq创建filespace,tablespace,database,table

    使用HAWQ   在HAWQ的使用上跟Greenplum基本就一样一样的了.比如:   1. 创建表空间 #选创建filespace,生成配置文件 [gpadmin@master ~]$ hawq f ...