【问题标题】:Where to place Logic in MVC with ViewModel Pattern使用 ViewModel 模式在 MVC 中放置逻辑的位置
【发布时间】:2013-01-20 04:30:10
【问题描述】:

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

在我的例子中,我有一个控制器,它启动一个连接到视图的 ViewModel。

如果在 URL 中没有附加变量 DateForLookUp,控制器将使用 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);
    }

【问题讨论】:

    标签: asp.net asp.net-mvc asp.net-mvc-3 viewmodel


    【解决方案1】:

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

    我将我的 MVC 应用程序分解为几个不同的项目,以使所有层保持良好的分离:

    • AppName.Configuration:处理应用程序的任何配置(即拉入 web.config/app 设置、资源文件等)
    • AppName.Data:这是执行所有数据库访问的数据层(无业务逻辑)。 DBML/EDMX 在这里,我的存储库类也在这里。
    • AppName.Models:这是我为 MVC 定义的所有 ViewModel 以及整个应用程序所需的其他模型对象的位置。
    • AppName.Services:这是我的业务层,一切都必须经过这里才能到达数据层或表示/Web 层。 ViewModel 由数据库对象构建,数据验证在此处进行,等等。
    • 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 发送到视图,然后在从视图发布时接收数据并将其发送到服务层进行验证、处理、保存回存储库等业务逻辑等

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-03-10
      • 1970-01-01
      • 1970-01-01
      • 2012-09-12
      • 2014-02-09
      • 1970-01-01
      • 1970-01-01
      • 2011-10-16
      相关资源
      最近更新 更多