![]() |
1
446
首先,如果你不知道你需要它,那么你可能不需要它。如果你不认识到DDD解决的问题,那么也许你没有这些问题。即使是DDD倡导者也经常指出DDD只适用于大型(6个月)项目。 假设你现在还在读,我对DDD的看法是: DDD是为了让你的软件成为一个真实系统或过程的模型。在使用DDD时,您必须与 domain expert 谁能解释现实世界的系统是如何工作的?例如,如果您正在开发一个处理赛马下注的系统,那么您的领域专家可能是一个经验丰富的博彩公司。 在你和领域专家之间,你建立了一个 无处不在的语言 (ul),基本上是对系统的概念描述。其思想是,您应该能够以领域专家能够阅读并验证其正确性的方式记录系统所做的工作。在我们的下注示例中,无处不在的语言将包括诸如“race”、“bet”、“odds”等词的定义。 UL所描述的概念将构成面向对象设计的基础。DDD提供了一些关于对象应如何交互的明确指导,并帮助您将对象划分为以下类别:
DDD还推荐了几种模式:
现在,在这一点上,我不得不说,如果你以前没有听说过这些事情,你不应该试图使用DDD在任何项目,你有一个最后期限。在尝试DDD之前,您应该熟悉 design patterns 和 enterprise design patterns . 了解这些使DDD更容易掌握。如上所述,有一个 free introduction to DDD 可从InfoQ获得(在这里您还可以找到有关DDD的讨论)。 |
![]() |
2
30
以stackoverflow为例。不是开始设计一些Web表单,而是首先集中精力对问题域内的实体进行面向对象的建模,例如用户、问题、答案、投票、评论等,因为设计是由问题域的细节驱动的,所以称为 领域驱动设计 . 你可以在里面读更多 Eric Evans' book . |
![]() |
Tony Raimo · 域实体是否应该调用存储库? 7 年前 |
![]() |
Seb · DDD只读存储库返回“值对象” 7 年前 |
![]() |
tlt · 使用嵌套对象和大集合进行聚合根优化 7 年前 |
![]() |
PatrickSJ · DDD,状态对象/值对象 7 年前 |
![]() |
msmani · DDD更改聚合根id 7 年前 |
![]() |
DuskMcDusk · 逻辑和性能中的聚合根冲突 7 年前 |