实际上,什么是领域驱动开发?[关闭]


24

我从该地区的开发商那里听说了域驱动开发。他大声疾呼,就像改变需求的灵丹妙药。

我读了维基。还是不太清楚。实际上,“ 3D”是什么?现在UML类图表已过时真的令人惊讶吗?

Answers:


29

好吧,首先,我认为您所引用的Wikipedia文章不是很好,主要是因为它引用了一堆仅是Domain Driven Design辅助的内容,并且对任何人都没有启发。

但是,作为一个将“领域驱动设计”放在心上的人(通常值得一看的是DDD,而不是3D),如果您读了很多Eric的第一章,我总是觉得DDD的基础很明显。埃文斯的书。但这是一组模式和实践,因此,在不做任何详细说明的情况下,简单地给出一个三句话的摘要是什么,它是什么,优点是什么。哪些细节可以引起任何人的共鸣,也可能大不相同;大概10年前,我本人根本看不到这一点。

DDD不是灵丹妙药。如果明智地做到这一点,那就是要采用类似于工匠的方法来构建软件,并认识到需要减少开发团队与为其构建软件的企业之间的认知摩擦。最重要的实践之一是拥有一层,软件团队和业务团队使用的领域词汇应尽可能紧密地匹配。当您逐渐了解要解决的业务问题时,可以迭代地构建此层。当在该层中对业务逻辑进行合理编码时,通过将与那些系统之间的交互分解为接口,将它们与企业应用程序通常具有的所有复杂的依赖关系隔离开来,实际域层中使用的语言最终将变得十分简洁,明显和可读。

考虑到我在大多数企业软件中所见的形状,在实践中,DDD 听起来像是灵丹妙药,因为大多数企业软件的关注点分离程度差,几乎无法测试,并且软件团队非常担心更改,因为他们不知道表面上甚至是微不足道的代码更改可能带来的副作用,而经过适当因素分解的域层将可以独立测试和验证。但是实际上,DDD承认系统很少孤立存在。DDD包括旧系统的应对模式(反腐败层,有界上下文,仅举几例)。

如果您练习面向对象的设计(包括松耦合的原则),并且认真地练习单元测试,并且毫不留情地重构代码,并且在构建系统时与领域专家一起工作,那么最终您将得到以下结果:基本上,领域驱动设计的提倡者正在谈论什么。

Evans的书中描述了一些特定的模式,这些模式主要适用于企业软件开发,而有些则是相当通用的原则,但从本质上讲,DDD是一种实用的软件开发方法,可以随着时间的流逝减少技术债务的积累,并让您的客户更快乐,因为您能够彼此说相同的语言,并且由于彼此之间具有更好的理解优势而可以提供更好的解决方案。


6

高层次的描述可能是-

对类进行建模以反映问题域的数据结构和行为。

这样,您就可以将问题域中的更改直接映射到代码中的更改,因此随着问题域的发展,更新起来应该更加容易。


2

免责声明:这个问题被标记为重复后,我已经添加了此答案。我不同意,但是我们来了。:-)

域驱动设计旨在在高价值/高复杂性域中设计软件。

这就变成了用于构建企业软件的另一种方法:涉及到太多的学习,并且最重要的结果是,您一开始就找不到正确的解决方案。

  • 因为您将一路学习
  • 因为利益相关者不会一口气说出所有真相。
  • 因为该领域将不断发展

或两者结合。

两种方式都需要良好的软件基础来频繁重写软件。这就是为什么本书强调围绕领域模型模式的一组给定模式的原因:它们是2004年最合理的组合。

但是,OOP和战术模式并不是最重要的。为了以进化的方式构建出色的软件,必须掌握技术。但这只是配方的一种成分。其他?

  1. 对语言的迷恋是发现隐藏细微差别的一种方式。
  2. 专注于全局视图,以便能够交付出色的东西。
  3. 许多较简单的模型而不是较大的模型的同居。
  4. 强调与领域专家以及开发团队内部的协作建模
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.