2012-03-19 53 views
2

我有一系列的继承对象,它们只是在类之间的几个字段之间非常相似。这个类层次结构的基础是一个抽象类,它包含许多后续对象应该具有的几个字段。事情是这样的:DRY主体与MVC中的轻/薄视图相似/继承的对象

abstractBase 
    obj1 : abstractBase 
    obj2 : obj1 
     obj3 : obj2 

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

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

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

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

好的,我不会违反DRY本人,我认为这是一件好事。但在不利方面,这些观点将包含逻辑。据我所知,这是或多或少皱起了眉头。

  • 有没有人有过类似的情况?
  • 你采取了什么方法?
  • 是否有另一个选项我没有看到/没有意识到?

现在我正在倾向*倾向较重视图和较少冗余代码。它会更好。

感谢

回答

3

我同意与所选择的答案How much logic is allowed in ASP.NET MVC views?

本质的观点是为了作为结构您的模型数据的显示。因此,如果为了显示特定模型而创建的结构可以基于模型中包含的数据进行调整,则视图正在达到其目的。基于模型的某些属性,在视图中有条件地显示元素意味着渲染是可接受的做法。

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

+0

谢谢mhornfeck。我正在寻找错误的条款。那篇文章很棒。 +1 Shyju,我仍然在反对强烈类型的观点,我只是在调整我即时“绑定”的内容。但是现在我想到了你在说什么......部分视图根据它们插入的视图继承了它们绑定的内容。所以它们也可能适合我的需要。唯一的缺点是我仍然看到多个视图=控制器中的多个actionevents =更多重复的代码。 + 1 我仍然有点撕裂,因为我正在做的事情可能过于复杂......但结果是减少重复... – 2012-03-20 03:26:51

2

我认为你应该遵循强类型化视图的第一种方法。你可以有ViewModel,它们是特定的视图,然后绑定到视图。无论您感到在另一个View中存在ViewModel的可重用性,请使用PartialViews。