域建模,DDD中的域对象

时间:2010-08-25 19:12:52

标签: domain-driven-design

我是DDD的新手,并试图掌握一些概念。

有人可以向我解释DDD中域建模背后的想法。

我已经完成了维基百科的解释:http://en.wikipedia.org/wiki/Domain_model但似乎我的理解中还有一些灰色地带。

根据我的理解,域建模涉及围绕业务实体构建模型以表达其关系,表达参与模型的实体等。

这不是一直在实践中的东西吗?在面向对象的世界中,您将业务实体建模为类,对象等。并围绕此构建软件。

我不理解的是域模型在DDD中的重点。它是您在OO世界中找到的相同对象/类建模,还是DDD的新功能? 它与面向对象的设计/建模有何不同?

非常感谢您的回答。

2 个答案:

答案 0 :(得分:6)

一个区别是DDD中Domain Model Pattern的“正确”实施与跨领域问题是隔离的。

例如,它与数据库或其他持久性无关。它包含验证逻辑,它是业务验证,而不是“名称是否超过列长度?”验证

这个想法是,域模型在可能的范围内以业务术语(“无所不在的语言”)封装“业务” - 并将业务的相关方面暴露给“程序”而不必默认需求该软件。

另一方面,“软件”涉及IO,UI等,但将所有业务逻辑委托给域模型。

原则上,您可以将域模型包装在程序集中,并在多个应用程序中使用它。当业务规则发生变化时,您会有一个非常合理的位置来影响变更(因为模型是业务相关方面的1:1或几乎如此表示,并且用与业务)。

答案 1 :(得分:1)

DDD中的域不需要在OO中实现。根据我的经验,OO领域模型通常是最好的,但是有非常有效的情况可能不是。

您可以在规则中使用规则引擎实现域(例如荷兰的大型抵押贷款应用程序)。或者你可以用功能语言来做。其实质是,您的域名,无论它实施的方式如何,都与我通常称之为您的应用程序的技术方面的内容隔离开来(或者,正如之前的回答所称,跨领域的问题,尽管我认为很可能是域内的跨领域问题)。可以使用适配器实现的隔离层使得域尽可能地,甚至完全地独立于技术性。该层通常利用Facade和Observer等模式。