Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 关于领域模型的问题&;他们的能见度_C#_Architecture_Model Driven Development - Fatal编程技术网

C# 关于领域模型的问题&;他们的能见度

C# 关于领域模型的问题&;他们的能见度,c#,architecture,model-driven-development,C#,Architecture,Model Driven Development,我参与了一场关于领域模型可见性的有趣辩论,我想知道这里的人是否有好的指导 根据我对MDA的理解,我们不需要在整个应用程序层和层中公开域模型 原因是对域模型的任何更改都会对整个应用程序产生影响 明智的做法是公开轻量级对象(DTO),它是域模型的一个小子集,用于抽象实际模型 另一方面,对域模型的任何更改都意味着在整个应用程序中更改各种DTO,以使更改可见,而如果我们公开了域模型,则更改只在一个位置进行 希望看到一些关于这方面的评论和想法 感谢所有的帮助 不,MDA不是这样的。它是关于将自己与特定

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

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


感谢所有的帮助

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

是否公开域模型取决于应用程序。对于经常使用该应用程序的用户(想想您的IDE),域模型就会清楚地公开,您可以直接操作该域中的对象。但对于偶尔使用的应用程序(想想机场的报到亭),应用程序应该引导用户完成工作流程

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

事实上,完全可以用直接公开的域对象构建企业应用程序;这是裸体对象模式的目标。有几个开源框架实现了这一点,包括原始的裸对象框架(在Java上)。还有一个与.NET相当的商业版本

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


完全披露:我是Java版NOF的提交人,没有直接参与.NET版本。

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

我对这方面的知识不太了解,但我最近读到了这篇文章,我认为这是相关的,关于DTO不一定是一个好主意,让您的域模型在不同的层上重复是可以的,这样就不会违反DRY