【问题标题】:What to do when Model is exactly the same as ViewModel?Model和ViewModel一模一样怎么办?
【发布时间】:2013-05-28 06:56:06
【问题描述】:
我想知道什么是最佳实践。我被告知要始终创建 ViewModel,并且永远不要使用核心 Model 类将数据传递给 View。
这就说得通了。
让我把事情分开。但是什么是 Model 和 ViewModel 完全一样。我应该重新创建另一个类还是只使用它。
我觉得我应该重新创作。只想知道专家怎么说..
【问题讨论】:
标签:
c#
asp.net-mvc
entity-framework
entity-framework-4
asp.net-mvc-viewmodel
【解决方案1】:
您绝对应该创建一个单独的视图模型,即使它与您的域实体相同。视图模型和域实体应该是完全独立的,即您应该能够更改其中一个,而另一个不需要知道或关心更改。您的视图模型应该代表您的视图,并且您的域实体应该......嗯......代表您的域实体。它们现在可能相同,但如果其中任何一个发生变化,其中一个的更改不应影响另一个。
如果您的域模型突然发生变化并且现在具有不再与您的视图模型相关的字段怎么办?如果它们不是分开的,那你就有问题了。或者,更糟糕(而且可能更有可能),如果您的 视图模型 突然需要来自完全不同实体的更多信息怎么办?您是否要使用这些完全不相关的信息来破坏域模型中的类封装,只是为了让您可以在视图中访问它?
让您的解决方案保持解耦和灵活。使用视图模型。
【解决方案2】:
顺便说一句,我建议创建一个 ModelView。所以在这种特殊情况下是一样的,它会像 UI 和模型之间的“桥梁”一样工作,在其上传输数据。
但它对可扩展性有好处,因为您很可能想为您的视图模型添加一些特定的 UI,因此它会越来越偏离模型本身。
所以一般建议:顺便创建它,即使 现在它们是相同的,因为它可以帮助您在 之后需要它时进行扩展。
【解决方案3】:
但是什么是 Model 和 ViewModel 完全一样。我应该重新创建
另一个类或只是使用它。
如果它完全相同,您当然不需要视图模型。但这种情况非常罕见。