3

我在 asp.net mvc 3 中使用 ViewModel。

在我的情况下,我有一个控制器,它启动一个连接到视图的 ViewModel。

如果DateForLookUpURL 中没有附加变量,则控制器使用 DateTime.UctNow 初始化 ViewModel,否则使用该变量。

我需要在视图上创建链接。当用户单击链接时,我必须DateForLookUp取值并加减一天。

我的问题:

  • 将这个逻辑、ServiceLayer、ViewModel、Controller 或 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);
    }
4

1 回答 1

2

在我看来(并且在实践中),我会将任何和所有逻辑都放在服务层中。

我将我的 MVC 应用程序分成几个不同的项目,以保持所有层很好地分开:

  • AppName.Configuration:处理应用程序的任何配置(即拉入 web.config/app 设置、资源文件等)
  • AppName.Data:这是执行所有数据库访问的数据层(无业务逻辑)。DBML/EDMX 在这里,我的存储库类也在这里。
  • AppName.Models:这是我为 MVC 定义的所有 ViewModel 以及整个应用程序所需的其他模型对象的地方。
  • AppName.Services:这是我的业务层,一切都必须经过这里才能到达数据层或表示/Web 层。ViewModels 是从数据库对象构建的,数据验证发生在这里,等等。
  • AppName.Web:这将是 MVC 应用程序。
  • AppName.Data.Test:数据应用的单元测试
  • AppName.Services.Test:服务的单元测试
  • AppName.Web.Test:MVC 控制器的单元测试
  • AppName.Web.UI.Test:Web 用户界面的单元测试(使用 WATIN)

我还有一组打包到 NuGet 包中的类,如果需要,我可以将它们添加到我的应用程序中,即(对于本示例):

  • CompanyName.Data:数据层逻辑的通用库
  • CompanyName.MVC:用于 ASP.NET MVC 集成的通用库
  • CompanyName.Utilities:杂项实用程序的公共库

我的控制器什么都不做,除了从服务层获取 ViewModel 发送到视图,然后在从视图发布时接收数据并将其发送到服务层进行验证、处理、保存回存储库、其他业务逻辑,等等

于 2013-02-05T11:17:55.927 回答