2013-02-05 61 views
4

我使用視圖模型在asp.net mvc的3在哪裏放置在邏輯與MVC模式的視圖模型

在我來說,我有一個控制器,它發起連接到View一個視圖模型。

如果在URL中沒有附加變量DateForLookUp,則控制器使用DateTime.UctNow初始化ViewModel,否則使用該變量。

我需要創建鏈接在視圖上。當用戶點擊鏈接時,我必須採取DateForLookUp的值並添加或減去一天。

我的問題:

  • 哪裏是合適的地方這個邏輯,ServiceLayer,視圖模型,控制器或查看?

VIEW

@Html.ActionLink("Next Day", "Daily") 

@Html.ActionLink("Previous Day", "Daily") 

控制器

public ActionResult Daily(string dateForLookUp) 
    { 
     DateTime dateTimeForLookUp; 
     if (string.IsNullOrWhiteSpace(dateForLookUp)) 
      dateTimeForLookUp = DateTime.UtcNow; 
     else 
      dateTimeForLookUp = DateTime.Parse(dateForLookUp); 

     var eventsInDate = eventAggregateService.FindAllForDate(dateTimeForLookUp); 
     EventsAggregateDailyListViewModel eventDailyVM = new EventsAggregateDailyListViewModel(); 
     eventDailyVM = new EventsAggregateDailyListViewModelBuilder().Build(eventDailyVM, dateTimeForLookUp); 
     return View(eventDailyVM); 
    } 

回答

3

在我看來(和實踐),我會放置任何和所有的邏輯在服務層。

我打破我的MVC應用到幾個不同的項目,以保持很好地分離所有層:

  • AppName.Configuration:處理應用程序的任何配置(即拉在web.config中/應用程序設置,資源文件等)
  • AppName.Data:這是執行所有數據庫訪問的數據層(無業務邏輯)。 DBML/EDMX居住在這裏,我的倉庫類也住在這裏。
  • AppName.Models:這是我爲所有MVC定義的ViewModel以及整個應用程序需要的其他模型對象。
  • AppName.Services:這是我的業務層,每件事都必須經過這裏才能到達數據層或演示文稿/ Web層。 ViewModels是從數據庫對象構建的,數據驗證發生在這裏等。
  • AppName.Web:這將是MVC應用程序。
  • AppName.Data.Test:對於數據應用單元測試
  • AppName.Services.Test:爲MVC控制器
  • AppName.Web單元測試:對於服務
  • AppName.Web.Test單元測試。 UI.Test:單元測試的Web用戶界面(使用華廷)

我也有一組打包成的NuGet包中的類如果需要的話/時,即我可以添加到我的應用程序(在這個例子中):

  • CompanyName.Data:用於數據層邏輯
  • CompanyName.MVC普通的庫:用於ASP.NET MVC集成
  • 公司名稱通用庫。公用事業:雜項公用事業

我控制器公共庫做什麼,除了獲得從服務層的ViewModels到時後從意見發送到的意見,然後接收數據,並把它送上了服務層進行驗證,處理,回儲存庫,其他業務邏輯等。

相關問題