2

我有一系列继承的对象,它们都非常相似,只有几个字段在类之间有所不同。在这个类层次结构的基础上是一个抽象类,它包含所有后续对象应该具有的许多字段。像这样的东西:

abstractBase
  obj1 : abstractBase
    obj2 : obj1
      obj3 : obj2

显示这些对象的视图对所有对象来说基本相同,我只是引入新的 div 来显示不同的数据。由于我对 MVC 相当陌生,因此我只有两个主要选择:

一种方法是为每个具体对象创建强类型视图。每个视图都非常相似,但底层对象略有不同。在我看来,这违反了 DRY 原则,因为每个视图的 90% 或更多内容将在下一个视图中重复。但从好的方面来说,这些观点将没有任何重要的逻辑。

另一种方法是将视图绑定到基本抽象类,然后对继承的类进行检查以确定是否需要渲染某些内容。就像是:

if (Model.baseObject is obj3){ render out the special fields }

从好的方面来说,我不会违反 DRY 原则,我认为这是一件好事。但不利的一面是,视图将包含逻辑。据我了解,这或多或少是不赞成的。

  • 有没有人遇到过类似的情况?
  • 你采取了什么方法?
  • 还有其他我没有看到/不知道的选择吗?

现在我倾向于*更重的视图和更少的冗余代码。它看起来更好。

谢谢

4

2 回答 2

3

我同意在 ASP.NET MVC 视图中允许多少逻辑?

本质上,视图旨在用作显示模型数据的结构。因此,如果它为显示特定模型而创建的结构可以根据模型中包含的数据进行调整,那么视图就达到了它的目的。根据要渲染的模型的某些属性有条件地在视图中显示元素是一种可接受的做法。

如果您的视图包含以任何方式修改模型数据的逻辑,这将违反 MVC 旨在建立的关注点分离。

于 2012-03-20T01:06:37.247 回答
2

我认为您应该遵循具有强类型视图的第一种方法。您可以拥有特定于这些视图的 ViewModel,然后绑定到该视图。无论您在哪里感觉到另一个 View 中存在的 ViewModel 的可重用性,都可以使用 PartialViews。

于 2012-03-20T01:10:33.850 回答