2012-04-12 66 views
1

對於一個例子簡單,可以說我有一個對象模型與下面的層級數據類:將分層數據傳遞給視圖的最佳實踐/首選項?

  • 作者

每個這些數據類只有con爲他們的子女,而不是他們的父母提供實例的引用,他們只包含Id。例如,Book有Book.Chapters,但它沒有對其父(即:Book.Author)的引用,而是具有父代的Id(即:Book.AuthorId)。

現在我想在我的視圖中顯示這個層次結構的'breadcrumbs'。但要做到這一點,我需要得到的信息,如Author.Name,Book.Name ......所以,我看到它,我有以下選擇:

  1. 爲每個視圖創建自定義模式。即:new SingleBookViewModel {TheAuthor = DB.GetAuthor(book.AuthorId),TheBook = book}

  2. 從書中獲取視圖本身的數據。因此,例如,如果我有書視圖,我可以使用:Author author = GetAuthor(book.AuthorId)...並在剃鬚刀視圖內執行此操作。

  3. 使用Tuple類傳遞數據。因此,對於觀看的章節我會填上以下簽名的元組的型號:

    Tuple<Author, Book, Chapter>

你會用哪種方法?或者你會使用不同的東西?

目前我正在使用第三種方法,Tuple。

第二種方法可能是最「標準」的。但我不喜歡必須創建和維護與每個數據類(作者,書,章)相對應的視圖模型類的想法。

我想了解人們在這方面所做的最佳實踐......以及使用元組是否合理。

回答

1

我會用ViewModels實現這一點。您的每個視圖都將被強制鍵入ViewModel,該ViewModel將包含該視圖所需的所有數據。您可以在該ViewModel中獲得一組作者,其中包含一系列書籍,其中包含一系列章節。

作爲一種替代方案,您可以將您的視圖綁定到作者集合,並在選擇作者時向控制器的操作發出ajax請求,以返回Json格式的書籍。這同樣適用於章節。

+0

不幸的是,Ajax/JSON無論如何不會幫助我,因爲數據是靜態的(意思是在視圖呈現後它不會改變)並且是'麪包屑'信息需要從用戶那裏顯示給用戶開始。 – Skonen 2012-04-12 09:01:46

+0

然後創建一個ViewModel對象,它包裝所有你需要的數據,甚至是應該顯示在麪包屑中的數據。你的視圖只是呈現它收到的任何東西。這不工作嗎? – Dante 2012-04-12 09:25:52

+0

是的。唯一的缺點是我在關於這些視圖模型的創建/維護命中的問題中提到。 – Skonen 2012-04-12 09:30:45