2011-03-03 94 views
2

我正在創建一個小視圖框架。我沒有試圖堅持嚴格的MVC遵守,但我絕對不想妨礙MVC的做法。視圖創建部分(子視圖)是不好的做法嗎?

無論如何,我的一個問題是這樣的:它創建它自己的子視圖的觀點是不好的?

例如,在僞上下的C#代碼:

/*BlogEntryView*/ 
<h1>my blog entry...</h1> 
<div class="Comments"> 
{# //code 
    foreach(var comment in Comments){ 
    Write(new CommentView(comment)); 
    } 
#} 
</div> 

是一個MVC風格這是不好的做法?是否應該在BlogEntryView中提供一個「佔位符」,模型使用CommentViews填充該佔位符?

(也請不要標記asp.net-MVC,這是類似的,但絕不使用ASP.Net MVC技術)

爲了進行比較,在此相反,會加入一些看法佔位符的型號代碼:

/*BlogEntryView*/ 
<h1>my blog entry...</h1> 
<div class="Comments"> 
{# SomePlaceholder #} 
</div> 

/*In the model code for BlogEntry*/ 
//v is a BlogEntryView 
foreach(var comment in Comments){ 
    v.PlaceHolder.Add(new CommentView(comment)); 
} 

回答

1

兩個ASP.NET MVC和Ruby on Rails方便我覺得你通過使用部分意見指的是方法。

使用您的示例通常會生成一個視圖,該視圖稱爲部分註釋記錄。在ASP.NET MVC C#這將如下所示: -

<h1>my blog entry...</h1> 
<div class="Comments"> 
    <% foreach (var comment in Model.Comments) { %> 
    <% Html.RenderPartial("Comment", comment); %> 
    <% } %> 
</div> 

按照目前的MVC理念和設計原則這種分解成圖碼小「原子」的部分是積極鼓勵在許多圈子。然而,這種分解和可維護性之間總是有一個平衡點。

+0

我知道有很好的視圖代碼的小原子部分,但我不知道從另一個視圖(而不是說,模型代碼)生成這些原子部分被認爲是好的 – Earlz 2011-03-03 00:37:19

0

視圖創建它自己的子視圖有什麼不好嗎?我的答案是「否」。在創建部分視圖時,您可以以模塊化方式更改UI內容。

實現結果總是有多種方式。我個人認爲ascx文件是創建可以從定製用戶控件繼承的可重用模塊的一種很好的乾淨方式。它的模塊化方法爲我保持了非常有條理的組織。

只是我的2美分...

1

號這實際上是ASP.NET MVC模板功能如何工作的MVC。然而,在ASP.NET MVC中潛在的缺陷是在文件結構中搜索視圖的性能成本很低。這可以通過明確指定全視圖路徑來避免。

http://vishalswami.blogspot.com/2007/11/design-patterns-in-mvc_30.html討論了MVC體系結構。 「四人幫」還建議MVC最大的優勢之一是它有助於組合用戶界面(這就是你所描述的)。

0

我知道有社區都贊成和反對意見呈現子視圖。

我個人認爲使用RenderPartial仍然是一個問題。如果視控制器操作的模型提供相同的模型,則根據其他視圖,我沒有視圖問題。

另一方面,RenderAction不太受關注,因爲它調用一個控制器動作,然後渲染一個視圖。它本身就是一個完整的請求生命週期。但是,它有很多好處,特別是對於諸如網站導航,用戶帳戶狀態,廣告或其他頁面功能等交叉問題,這些功能完全獨立於網頁的主要目標。

1

在傳統的MVC中,每個控制器和模型都有一個視圖,稱爲「MVC三元組」。我認爲你能夠嵌入其他模板以獲得可重用性(認爲偏好)的視圖模板是什麼。

一件技術得到這個正確與mustache。它使用視圖模型,加上模板。該模板可以請求其他部分重用其他模板的塊。

許多Web MVC框架的問題是,他們將視圖視爲模板,這是查看它的錯誤方式(無雙關語意圖)。一旦你有一個代表視圖的課程,這一切變得更加容易。

個人而言,我認爲您發佈的具體示例是錯誤的形式,因爲模板不應該具有對象的這種訪問權限並像這樣實例化它們。模板應該從外部來源(視圖模型)獲取他們的數據,這使得這些實例化更加清晰。

+0

嗯有趣的不同的觀點。基本上看來,我所問的問題是,如果「純粹的」MVC比所有這些都好, – Earlz 2011-03-03 23:58:48

+0

另外,所以你說我的第二個代碼示例是你喜歡使用的那個? (我編輯了我的問題以包含兩種方法) – Earlz 2011-03-04 00:02:45

+0

是的,imo,第二個代碼塊是「正確的」。您的視圖模板應該只包含標記和基本控制結構。 – zombor 2011-03-07 17:24:57

相關問題