关于域名模型的问题&他们的知名度

时间:2010-05-05 03:11:47

标签: c# architecture model-driven-development

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

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

希望看到一些评论&对此的想法。

感谢所有帮助!

3 个答案:

答案 0 :(得分:2)

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

是否应公开域模型取决于应用程序。对于经常使用该应用程序的用户(考虑一下您的IDE),可以清楚地显示域模型,并直接操作该域中的对象。但对于偶尔使用的应用程序(想想机场的售货亭办理登机手续),应用程序应引导用户完成工作流程。

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

事实上,完全可以通过直接暴露的域对象构建企业应用程序;这是Naked Objects模式的目标。有几个开源框架可以实现这一点,包括原始的Naked Objects Framework(在Java上)。还有.NET的商业等价物。

有关域对象的更多一般性讨论,我建议您查看Evans的书籍,Domain-Driven Design。雅虎还有一个活跃的新闻组。

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

答案 1 :(得分:0)

我同意Dan的观点。解决这个问题的一种方法是使用接口。您使公共方法返回域对象最初实现的接口。当您发现从应用程序返回域对象不再有效时,您将介绍DTO并实现相关接口。虽然您的图书馆的内部现在已经改变,但任何消费应用程序都不会受到影响。

答案 2 :(得分:0)

我在这个领域并不是很了解,但我最近阅读了这篇blog post by Gojko Adzic,我认为这是相关的,关于DTO如何不一定是个好主意,你可以重复你的领域模型。分层,以免违反DRY。