DRY主体与MVC中针对类似/继承对象的轻/薄视图

时间:2012-03-19 23:49:45

标签: asp.net-mvc dry asp.net-mvc-views

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

abstractBase
  obj1 : abstractBase
    obj2 : obj1
      obj3 : obj2

显示这些对象的视图对于所有这些对象基本相同,我只是引入新的div来显示不同的数据。由于我对MVC还不熟悉,因此只留下两个主要选项:

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

另一种方法是将视图绑定到基本抽象类,然后对继承的类引入检查以确定是否需要呈现某些内容。类似的东西:

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

在好的方面,我不会违反DRY校长,我认为这是一件好事。但在不利方面,这些观点将包含逻辑。据我所知,这或多或少都不受欢迎。

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

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

由于

2 个答案:

答案 0 :(得分:3)

我同意How much logic is allowed in ASP.NET MVC views?

所选择的答案

基本上,视图用作显示模型数据的结构。因此,如果可以基于模型中包含的数据调整为特定模型的显示创建的结构,则视图正在服务于其目的。根据模型的某些属性有条件地在视图中显示元素是一种可接受的做法。

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

答案 1 :(得分:2)

我认为你应该遵循强烈输入视图的第一种方法。您可以拥有特定于那些视图的ViewModel,然后绑定到视图。无论您对另一个视图中存在的ViewModel的可重用性感到满意,都可以使用PartialViews。