2013-02-05 57 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到时后从意见发送到的意见,然后接收数据,并把它送上了服务层进行验证,处理,回储存库,其他业务逻辑等。

相关问题