2011-02-26 26 views
1

我正在學習ASP.NET MVC並查看ASP.NET MVC示例應用程序NerdDinnerNerdDinner中的類的位置

  1. 文件夾「Models」包含一個名爲Dinner.cs的類。這是主要的晚餐實體。 這個班不應該在其他地方嗎?例如「域」?而是應該將一個viewmodel類放在包含晚餐信息的Models文件夾中?

  2. 爲什麼位於名爲「Helpers」的文件夾中的文件「PaginatedList.cs」。不應該將該文件放在文件夾中:「模型」,因爲它被提供給視圖?

對此的任何清理將非常感激!

回答

1
  1. 當然,你的想法是對的。 NerdDinner僅用於概念展示的目的,並不真正適用於所有最佳實踐。隨着您自己的項目增長,它變得越來越明顯。您將您的域實體/服務/存儲庫放在單獨的文件夾中,然後單獨的項目,然後可能分開的解決方案。您會發現自己已將此文件夾重命名爲ViewModels,以便讓其他人在項目中更加明顯。

  2. PaginatedList可以是ViewModel幷包含與分頁相關的數據。然後它可以放到ViewModels文件夾中。但我相信你在NerdDinner中有什麼 - 只是一個簡單的View助手來生成分頁標記。此外,助手可能不是那麼嚴格的「視圖」或「視圖模型」 - 它們可以包含簡單的邏輯,它們有點在View和ViewModel之間:)。另外請注意,PaginatedList更像是一個「框架」問題,而不是「特定解決方案」。所以你不能把它放到項目特定的東西中的「視圖」或「模型」文件夾中。所以「助手」對於NerdDinner來說已經足夠了。在一個真正的解決方案中,你最好使它通用,將它包含到你在MVC之上的「框架」中。

1

對於第一個問題,Dinner.cs文件包含一個局部的Dinner類連同上一哥們類的一些屬性驗證。這是完全理智的,恕我直言,把這個文件放入Model文件夾,因爲它實際上是解決方案模型的一部分。

對於第二個問題,PaginatedList是一種數據結構,它允許您一次查看數據的某個「頁面」(一組固定的元素)。我真的不認爲這是一個ViewModel,「幫手」就是這樣。

我還想補充的另一件事是,如果你有一些視圖模型傳遞給你的視圖而不是實際的模型類,或者你有一組特定的數據元素可以通過,我想它會合理的,有一個單獨的ViewModel文件夾。

希望這會有所幫助:)