gpt4 book ai didi

asp.net - 使用 ViewModel 模式在 MVC 中的何处放置逻辑

转载 作者:行者123 更新时间:2023-12-02 02:06:40 25 4
gpt4 key购买 nike

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

在我的例子中,我有一个 Controller ,它启动一个连接到 View 的 ViewModel。

如果没有变量 DateForLookUp 附加到 URL 中,则 Controller 使用 DateTime.UctNow 初始化 ViewModel,否则它使用该变量。

我需要在 View 上创建链接。当用户单击链接时,我必须获取 DateForLookUp 值并增加或减少一天。

我的问题:

  • 将此逻辑、ServiceLayer、ViewModel、Controller 或 View 放在哪里合适?

查看

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

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

Controller

    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);
}

最佳答案

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

我将我的 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 Controller 的单元测试
  • AppName.Web.UI.Test:网络用户界面的单元测试(使用 WATIN)

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

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

我的 Controller 除了从服务层获取 ViewModels 发送到 View ,然后从 View 接收数据并将其发送到服务层进行验证、处理、保存回存储库,其他什么都不做业务逻辑等

关于asp.net - 使用 ViewModel 模式在 MVC 中的何处放置逻辑,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14704275/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com