2012-03-19 54 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。