关于域模型及其可见性的问题

Ano*_*ser 6 c# architecture model-driven-development

我参与了一场关于领域模型可见性的有趣辩论,并想知道这里的人是否有任何良好的指导.

  • 根据我对MDA的理解,我们不需要在整个应用程序层和层中公开域模型
  • 原因是对域模型的任何更改都会对整个应用程序产生影响
  • 明智的做法是暴露轻量级对象(DTO),它是域模型的一个小子集来抽象实际模型
  • 另一方面,对域模型的任何更改都意味着在整个应用程序中更改各种DTO以使更改可见,而如果我们确实公开域模型,则更改位于单个位置

希望看到一些关于此的评论和想法.

感谢所有的帮助!

Dan*_*ood 2

不,这不是 MDA 的目的。它是将自己与特定平台隔离开来,使用更高级别的符号(UML 及其操作语言)来指定系统的行为。

是否应该公开域模型取决于应用程序。对于经常使用应用程序的用户(想想你的 IDE),域模型是清晰公开的,你可以直接操作该域中的对象。但对于偶尔使用的应用程序(想象一下机场办理登机手续的自助终端),那么该应用程序应该引导用户完成工作流程。

即使您要屏蔽域对象,DTO 也不一定是必需的;这取决于域对象是否与呈现 UI 的层位于同一进程空间中。需要 DTO 的架构不太擅长适应新的需求,因为它们违反了 DRY 原则。

事实上,可以仅使用直接公开的域对象来构建企业应用程序;这就是裸对象模式的目标。有几个开源框架可以实现这一点,包括最初的 Naked Objects Framework(基于 Java)。还有一个 .NET 的商业版本。

有关领域对象的更多一般讨论,我建议您查看 Evans 的书《领域驱动设计》。雅虎上还有一个活跃的新闻组。

全面披露:我是 Java NOF 的提交者,不直接参与 .NET 版本。