DDD学习笔录——领域驱动设计的常见误区(即错误的理解)
可以将DDD看成一种开发思想体系;它促成了一种新的以领域为中心的思维方式。
它是一种学习过程,而非最终目标,这就是DDD的最大优势。
任何团队都可以编写一个软件来满足一组用例的需求,但那些将时间和精力花在其正在处理的问题域中的团队则能够持续演化产品以满足新的业务用例。
DDD本身并非一种严格的方法论,而是必须与一些迭代式软件项目方法论结合使用以构建并演化一个有用的模型。
由此可见下面的这些理解,存在很大的误区:
1、战术模式是DDD的关键
这明显不对,DDD并不是一种面向对象的设计,也不是一种以代码为中心的思想体系或者模式语言。
DDD与其说是软件设计模式 不如说是通过协作来解决问题的方法。其目的并非编写优雅的代码。
软件不过是DDD的一个构件而已。
2、DDD是一套框架
这一点可能我们现在也是这么错的理解的。那为何说它不是一套具体的框架呢?
DDD不需要一套特殊的框架或数据库。代码中实现的模型遵循POCO(纯老式的C#对象)原则,该原则确保模型完全没有任何基础代码以便不会出现干扰其以领域为中心的目的。虽然面向对象的方法论对于模型构造很有用,但这绝不是强制性的。
DDD在架构上具有不可知性,因为不存在你必须遵循的固定单一的架构样式以实现它。Evans的文章中介绍了一种分层架构样式,但这并非唯一的选项。架构样式可以变化,因为它们应该在有界上下文级别应用,而非应用程序级别。
3、DDD是一颗灵丹妙药
我本以为DDD可以让我成为大神,显然我要失望了,但还是要学完,至少不是毒药。
DDD可能需要付出大量努力,它需要迭代式开发方法论,以业务为向导以及聪明的开发人员。
所有的软件项目都能从DDD的分析实际中获益(例如提炼问题域),也能从战略模式中获益(例如分离一个表示领域逻辑的代码模型)。不过,并非所有软件项目都需要DDD的战术模式来构建一个富领域模型。寻常的领域不需要先进复杂的模型,因为她们只有很少或者没有领域逻辑。
DDD学习笔录——领域驱动设计的常见误区(即错误的理解)的更多相关文章
- DDD学习笔录——领域驱动设计DDD概念总结
- DDD(Domain-Driven Design) 领域驱动设计
DDD(Domain-Driven Design) 领域驱动设计 1. DDD(Domain-Driven Design)是什么? DDD是Eric Evans在2003年出版的<领域驱动设计: ...
- 【DDD】使用领域驱动设计思想实现业务系统
最近新接了一个业务系统——社区服务系统,为了快速熟悉和梳理老系统的业务逻辑和代码,同时对老系统代码做一些优化,于是打算花上一个月时间不间断地对老系统服务进行重构.同时,考虑到社区业务的复杂性,想起了之 ...
- DDD中Dto领域驱动设计概述,摘自《NET企业级应用架构设计》
- DDD领域驱动设计-概述-Ⅰ
如果我看得更远,那是因为我站在巨人的肩膀上.(If I have seen further it is by standing on ye shoulder of Giants.) ...
- DDD领域驱动设计和实践(转载)
-->目录导航 一. DDD领域驱动设计介绍 1. 什么是领域驱动设计(DDD) 2. 领域驱动设计的特点 3. 如果不使用DDD? 4. 领域驱动设计的分层架构和构成要素 5. 事务脚本和领域 ...
- 聊一聊中台和DDD(领域驱动设计)
本次分享价值:本次分享主要针对中台.微服务和领域模型的理念.本质及其构建方法论进行探讨.对领域分析的价值所在就是寻求"千变万化"中相对的"稳定性.第一性",然后 ...
- python 全栈开发,Day116(可迭代对象,type创建动态类,偏函数,面向对象的封装,获取外键数据,组合搜索,领域驱动设计(DDD))
昨日内容回顾 1. 三个类 ChangeList,封装列表页面需要的所有数据. StarkConfig,生成URL和视图对应关系 + 默认配置 AdminSite,用于保存 数据库类 和 处理该类的对 ...
- IDDD 实现领域驱动设计-理解限界上下文
上一篇:<IDDD 实现领域驱动设计-理解领域和子域> <实现领域驱动设计>前两章内容,基本上读完了,和<领域驱动设计>不同的是,它把很多的概念都放在前面进行讲述了 ...
随机推荐
- CSS3 之 RGBa 可透明颜色
在 CSS3 中,增加了一个 opacity 属性,允许开发者设置元素的透明度,现在 opacity 已被主流的现代浏览器支持,但 opacity 会把被设置的元素及其子元素同时设置为同一个透明度,这 ...
- CodeForces - 900D: Unusual Sequences (容斥&莫比乌斯&组合数学)
Count the number of distinct sequences a1, a2, ..., an (1 ≤ ai) consisting of positive integers such ...
- C#进阶之路(四):拉姆达
对于拉姆达,许多文章都讲过原理及如何使用,所以这篇文章我主要是摘录我学习过的文字,总结下我自己的学习心得. 什么是拉姆达表达式 "Lambda表达式"是一个匿名函数,是一种高效的类 ...
- 设置nodepad++的编码问题
- Yii的常用URL和渲染方法
当前页面url Yii::app()->request->url;跳转前一个页面url $this->redirect(Yii::app()->request->url ...
- SQL Sever 学习系列之二
SQL Sever 学习系列之二 SQL Server 学习系列之一(薪酬方案+基础) 四.有关时间输出问题 select GETDATE() 日期时间 ----显示为:2013-07 ...
- Windbg内核调试之三: 调试驱动
这次我们通过一个实际调试驱动的例子,来逐步体会Windbg在内核调试中的作用.由于条件所限,大多数情况下,很多人都是用VMware+Windbg调试内核(VMware的确是个好东西).但这样的调试需要 ...
- bzoj 4591 [Shoi2015]超能粒子炮·改——组合数前缀和
题目:https://www.lydsy.com/JudgeOnline/problem.php?id=4591 先说说自己的想法: 从组合意义的角度考虑,从n个里选<=k个,就添加k个空位置, ...
- 修改windows文件的换行符
应用场景: 在办公中,有可能存在,某些命令脚本使用windows下的文本编辑器进行编写 当放到测试环境的Linux中时,运行报错 需要使用的软件:xxd hexdump dos2unix 1.运行w ...
- Kubernetes创建挂载共享存储的容器
原文链接:https://www.58jb.com/html/135.html 在上一次的Mysql容器中,已经使用过了配置宿主机目录挂载的方式,这样虽然方便但是不够安全:一般都是把数据存储在远程服务 ...