ASP.NET MVC视图模型库?

时间:2011-04-10 22:13:25

标签: asp.net-mvc

我正在处理我的模型层次结构并提出一些问题。

1)我有每种视图类型的基本模型(添加,编辑和查看)。我把东西放在这些特定于每种视图类型的东西中。

2)然后我有一个模型库,上面的基础继承自。这允许我包含与所有视图相关的内容。

3)在我的ModelBase中,我有一些其他视图模型,如FeedbackViewModel,ShoppingCartViewModel等,我可以在任何视图上使用它。

4)我的MasterPage继承了ModelBase。

示例

Public MustInherit Class ModelBase
    Public Property ErrorMessage As String
    Public Property InformationMessage As String
    Public Property WarningMessage As String
    Public Property FeedbackModel As New FeedbackViewModel

End Class

Public MustInherit Class ViewModelBase
    Inherits ModelBase

    'View Model Specific Stuff
End Class

'Allows contact us form to be submitted.
Public Class ContactUsViewModel
    Inherits ViewModelBase

    Public Property Name As String
    Public Property EmailAddress As String
    Public Property Phone As String
    Public Property Comments As String

End Class

这是我模型的基本结构,但有几个问题:

1)如何处理不需要模型的视图,但我需要传递FeedabckViewModel,SHoppingCartViewModel等?我在考虑一个GenricViewModel?

2)你觉得这个设计有什么缺陷吗?

谢谢!

1 个答案:

答案 0 :(得分:2)

有些观点:

  • 为什么要使用ErrorMessageInformationalMessageWarningMessage等等ModelState应该绰绰有余,并且与验证助手相关联的更好你在View中编写手册stiching。

  • 我认为处理不同视图类型的“基础”模型有点矫枉过正。我认为指定模式的enum会更好,然后您可以做出相应的决定。

  • 总体而言,您的设计并没有真正错误。这是一个意见问题 - 我的通常是每个视图创建一个ViewModel。保持简单。我广泛使用区域,所以它不会弄乱。我通常尝试创建ViewModel以使View变得简单 - 这是最终目标,不是在View中重复使用代码,而是为了简化View。比如使用嵌套模型扩充模型以使用部分/模板,而不是拥有一堆字符串。

  

1)如何处理不需要模型的视图,但我需要传递FeedabckViewModel,SHoppingCartViewModel等?

这种自相矛盾吗? :)如果你只需要几个ViewModel的“部分”,要么创建另一个ViewModel,要么只是几个字段,只需将它粘贴在ViewData中即可。