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

推荐订阅源

W
WeLiveSecurity
T
Tenable Blog
Project Zero
Project Zero
C
Cybersecurity and Infrastructure Security Agency CISA
T
The Exploit Database - CXSecurity.com
P
Palo Alto Networks Blog
S
Schneier on Security
Scott Helme
Scott Helme
S
Securelist
Know Your Adversary
Know Your Adversary
Vercel News
Vercel News
IT之家
IT之家
V
V2EX
F
Fortinet All Blogs
Simon Willison's Weblog
Simon Willison's Weblog
K
Kaspersky official blog
博客园_首页
T
Tailwind CSS Blog
The GitHub Blog
The GitHub Blog
Spread Privacy
Spread Privacy
Microsoft Security Blog
Microsoft Security Blog
Cisco Talos Blog
Cisco Talos Blog
The Register - Security
The Register - Security
有赞技术团队
有赞技术团队
cs.CL updates on arXiv.org
cs.CL updates on arXiv.org
Cyberwarzone
Cyberwarzone
Google DeepMind News
Google DeepMind News
The Hacker News
The Hacker News
L
LINUX DO - 热门话题
Hugging Face - Blog
Hugging Face - Blog
博客园 - 三生石上(FineUI控件)
A
Arctic Wolf
Cyber Security Advisories - MS-ISAC
Cyber Security Advisories - MS-ISAC
C
CXSECURITY Database RSS Feed - CXSecurity.com
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
T
Threat Research - Cisco Blogs
P
Proofpoint News Feed
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
P
Privacy & Cybersecurity Law Blog
D
Darknet – Hacking Tools, Hacker News & Cyber Security
C
CERT Recently Published Vulnerability Notes
S
SegmentFault 最新的问题
AWS News Blog
AWS News Blog
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
罗磊的独立博客
Apple Machine Learning Research
Apple Machine Learning Research
P
Proofpoint News Feed
The Cloudflare Blog
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
V
Vulnerabilities – Threatpost

博客园 - 文野

数据结构(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也好,数据驱动、界面驱动也罢,建的实体,写的代码也基本是相近甚至是相似的。

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

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

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