2010-08-25 148 views
5

我对DDD非常陌生,并试图理解一些概念。域模型,DDD中的域对象

有人能解释我DDD领域建模背后的想法。

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

根据我的理解,领域建模包括建立各地的业务实体的模型来表达它们之间的关系,表达参与模型等实体..

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

我不明白的是强调领域建模得到DDD。它是否与OO世界中的对象/类建模相同?还是DDD的新特性? 它与面向对象的设计/建模有什么不同?

您的回答非常感谢。

回答

6

一个区别在于DDD中Domain Model Pattern的“适当”实现与交叉关注隔离。

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

这个想法是,领域模型尽可能地用业务术语(“无所不在的语言”)封装了“业务” - 并且将业务的相关方面暴露给“程序”而不默认软件的需求。另一方面,“软件”与IO,UI等有关,但将所有业务逻辑委托给领域模型。

原则上,您可以将您的域模型包装在一个程序集中,并在多个应用程序中使用它。当业务规则发生变化时,您有一个非常合乎逻辑的地方可以影响变更(因为该模型是业务相关方面的1:1或近似表示形式,并且与这生意)。

1

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

您可以在规则中使用规则引擎实现一个域(例如在荷兰为大型抵押贷款应用程序完成的例子)。或者你可以用功能性语言来做。其实质是,您的域以其实现的方式与我通常所说的应用程序的技术方面相隔离(或者,正如前面的答案所称的那样,是交叉的关注点,尽管我认为可能很好一个领域内的交叉问题)。可以使用适配器实现的隔离层使域尽可能甚至完全独立于技术。该层通常利用诸如Facade和Observer之类的模式。