惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

罗磊的独立博客
SecWiki News
SecWiki News
酷 壳 – CoolShell
酷 壳 – CoolShell
爱范儿
爱范儿
量子位
M
MIT News - Artificial intelligence
GbyAI
GbyAI
cs.AI updates on arXiv.org
cs.AI updates on arXiv.org
K
KPMG report finds enterprise disconnect between AI and its ROI | CIO
TaoSecurity Blog
TaoSecurity Blog
博客园 - 【当耐特】
H
Heimdal Security Blog
腾讯CDC
The Last Watchdog
The Last Watchdog
Security Archives - TechRepublic
Security Archives - TechRepublic
Hacker News: Ask HN
Hacker News: Ask HN
S
Schneier on Security
Microsoft Security Blog
Microsoft Security Blog
WordPress大学
WordPress大学
博客园 - 司徒正美
Recent Commits to openclaw:main
Recent Commits to openclaw:main
C
Cybersecurity and Infrastructure Security Agency CISA
S
SegmentFault 最新的问题
大猫的无限游戏
大猫的无限游戏
Application and Cybersecurity Blog
Application and Cybersecurity Blog
F
Full Disclosure
有赞技术团队
有赞技术团队
T
Tailwind CSS Blog
Engineering at Meta
Engineering at Meta
cs.CV updates on arXiv.org
cs.CV updates on arXiv.org
T
Threatpost
月光博客
月光博客
A
Arctic Wolf
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
雷峰网
雷峰网
T
Troy Hunt's Blog
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
The Cloudflare Blog
D
DataBreaches.Net
O
OpenAI News
L
LINUX DO - 最新话题
宝玉的分享
宝玉的分享
小众软件
小众软件
V
Vulnerabilities – Threatpost
A
About on SuperTechFans
人人都是产品经理
人人都是产品经理
T
The Exploit Database - CXSecurity.com
Martin Fowler
Martin Fowler
美团技术团队
P
Privacy International News Feed

博客园 - 文野

数据结构(C#语言版)——栈和队列 数据结构(C#语言版)——线性表 2011一月的三个故事 我想要的2011 我的2011的三个故事 《悟透JavaScript》中的知识点 用Windows Live Writer写博客 我们是不是把MVC、ORM等技术的主次颠倒了? 论单一职责 对象结构 由做梦想到的 2009第一帖,测试用Word2007发布博客 一点一点学ASP.NET之基础概念——事件 应用框架的设计与实现学习手札系列(持续更新) 未解决的问题(持续更新) 应用框架的设计与实现学习手札之类工厂服务——反射 一点一点学ASP.NET之基础概念——委托 一点一点学ASP.NET之示例——HttpModule 示例 一点一点学ASP.NET系列(持续更新)
DDD自问自答
文野 · 2012-09-14 · via 博客园 - 文野
  • DDD是否是把问题搞复杂了?大量CRUD再辅以工作流之类基本能解决大部分问题,何需DDD?

软件的本质是解决问题,解决问题的要义在于分解,面向过程与面向对象或者其它方式是问题的不同分解方法。

面向过程(结构化编程)通过算法来分解问题,面向对象通过对象交互(明确对象职责)来分解问题。

两者都是解决问题的方法,同一个问题用这两种方法都可以解决。相较来讲,当一个问题复杂到一定程度后,面向对象更有优势。

DDD是对如何使用好面向对象来进行设计、分析乃至开发的一种指导、规则甚至是约束。

两者其实没有谁比谁复杂之说,是否复杂,在于使用的人,如思维惯性、熟练程度等,一个熟悉习惯了DDD的人让他用事务脚本的方式去解决一个简单问题,完全有可能效率低于他直接用DDD的方式来解决问题的。

  • 为什么DDD在真实项目中不被接受?

DDD的目标之一是建立统一语言,这是业务专家与技术设计开发人员之间的沟通工具,往往以领域专家的术语为准。

这说明,向我们描述需求的人,一是此业务领域的专家,具有权威性,二是他在描述需求时,更多的是在讲述业务的组成,规则约束等,而不是希望将来系统提供的操作。

而在现实中,我们碰到的往往不是什么专家,很多时候甚至都不知道要的是什么。而在描述需求时,更多的是在讲述现有的或期望的操作过程,如填写什么,点击什么。

这就说明,我们第一没有,基本也无法建立统一语言。第二,我们得到的需求是过程化的,更倾向于算法与数据结构的,所以数据驱动或过程式的开发便自然而然了。

这种情况下,但问题具有一定复杂度时,如前面所说,这与熟练程度有关,作为设计开发人员,可以在内部以DDD的方式来设计开发,并建立统一语言,这有助于设计开发团队的沟通及对业务问题一致的理解,也有助于业务的分解实现。

  • 哪些更适合建立领域模型?

在平时的项目中,很大一部分功能往往是填写一个表单,走个工作流程,通过一些操作,改变些数据状态,最算得上业务的也就是些检查规则(如完整性检查,某个值是否在某个状态下指定的范围内等),这种建不建模型其实是无所谓的,DDD也好,数据驱动、界面驱动也罢,建的实体,写的代码也基本是相近甚至是相似的。

需要建立模型,往往是那种有一定交互体系,一整套完整规则,触发机制的,用户关心的不完全是界面上展现了什么,怎么操作,而是系统运行过程中各部分是否尽到职责,是否符合整个业务体系下制定的规范等。如《面向对象设计与分析》中举的水培系统,制定植物的培养计划,在温度达到一定临界点指定的时间范围内,根据计划,添加养分或者调整温度等。

这个例子离我们平时的企业开发比较远,平时的企业开发中,如安评安检系统,平时需要定期或不定期进行安全评价、安全检查,其中业务数据的变化达到一定指标后,产生危险点,发现危险点后需要预警,并且有些需要定期整改,复查等。

这种业务也是,用户已经不仅仅关心系统展现与操作,这些业务便是非常适合,需要建立领域模型的。