gpt4 book ai didi

asp.net-mvc - ASP.NET MVC - 服务层,每个 Controller 操作中的单个或多个服务?

转载 作者:行者123 更新时间:2023-12-02 22:39:45 24 4
gpt4 key购买 nike

我开始为我的 MVC 项目实现一个服务层,以减少一些臃肿的 Controller (它也有存储库/工作单元模式)。

我的问题是,如果您的页面有一个复杂的 View 模型,其中包含许多子对象等,并且在幕后进行了相当多的逻辑(让您了解原始开发人员编写的 Controller 有将近 4000 行代码!!) 让多个服务停止运行是否可以?或者我应该只拥有一个可以完成所有工作的大型 ReportService 吗?

我的 Controller 开始看起来像这样?如果我继续,我最终可能会调用很多不同的服务来构建 View 模型。

这看起来不错还是开始朝着错误的方向发展?

public ViewResult Index(int? reportId)
{
// get the base report object
var reportService = new ReportService();
var report = reportService.GetByReportId(reportId);
var model = Mapper.Map<Report, ReportViewModel>(report);

// get the current active user
var userService = new UserService();
var user = userService.GetCurrentUser();
model.User = Mapper.Map<User, ReportViewModel.UserViewModel>(user);

// get the first unread message
var messageService = new MessageService();
var message = messageService.GetFirstUnread(user.Id);
model.Message = Mapper.Map<Message, ReportViewModel.MessageViewModel>(message);

// get the category navigation
var categoryService = new CategoryService();
var categoryNavigation = categoryService.GetCategoryNavigation(report.Id);
model.CategoryNavigation = Mapper.Map<IEnumerable<Category>, IEnumerable<ReportViewModel.CategoryNavigationViewModel>>(categoryNavigation);

return View(model);
}

最佳答案

在你的 Controller 中有多个小服务是很好的。但是,这里有一点不对:

您的服务应该通过整个 Controller 可用,并通过构造函数注入(inject)以实现松散耦合。

所以像这样:

private readonly IReportService _reportService;
private readonly IUserService _userService;

public SomeConstructor(IReportService reportService, IUserService userService, etc.)
{
_reportService = reportService;
_userService = userService;
// etc
}

关于asp.net-mvc - ASP.NET MVC - 服务层,每个 Controller 操作中的单个或多个服务?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10905992/

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