【问题标题】:Where should I put external service calls in an ASP.NET MVC application?我应该将外部服务调用放在 ASP.NET MVC 应用程序中的什么位置?
【发布时间】:2014-05-19 06:38:55
【问题描述】:

我只是想知道在我的 MVC 应用程序中我应该将调用外部服务的代码放在哪里?

在“Exam Ref 70-486: Developing ASP.NET MVC 4 Web Applications”一书中,他们建议服务调用必须包含在Model代码中。但是,在我看来,服务调用必须放在像下面这样的代理类中,因此我们可以稍后根据需要修改服务调用:

public class ExternalServiceProxy
{
  public void DoSomething()
    {
       //Call the external service
    }
}

我只是想知道我的想法是正确的还是他们的建议是正确的?

谢谢。

【问题讨论】:

  • 我似乎同意你的观点,服务应该可以通过代理访问。此外,在不同的项目中。

标签: .net asp.net-mvc asp.net-mvc-4


【解决方案1】:

不要太拘泥于将所有内容都塞进 MVC“词汇表”中。 ASP.NET MVC 是一个 Web 框架,而不是一个包罗万象的架构设计。随意将您的外部服务调用放入代理、应用程序服务、基础架构服务或您喜欢的任何内容中。

【讨论】:

    【解决方案2】:

    您的控制器负责调用服务。但是,控制器也应该是轻量级的,这意味着它应该只包含控制器逻辑,而大部分业务或域逻辑应该在服务本身中。

    所以,我通常做的是在 Web 应用程序中创建一个 Services 文件夹,并将所有服务调用以本地代理服务的形式放在那里。这些被注入控制器并返回模型(PatientSummary)。然后,在控制器中,您会将返回的模型映射到正确的视图模型 (PatientSummaryViewModel),然后将其传递给视图。

     namespace WebApp.Services
     {
          public class PatientService
          {
               public List<PatientSummary> FindPatients()
               {
               }
          }
     }
    
     namespace WebApp.Controllers
     {
          public class PatientController
          {
               private readonly PatientService _patientService;
               public PatientController(PatientService patientService)
               {
                      _patientService = patientService;
               } 
               public ActionResult FindPatients()
               {
                    var patients = _patientService.FindPatients(); // return model entities
                    // create patient summary view model based on patients model
                    return View(patientSummaryViewModel);    
               }
          }
     }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-03-03
      • 1970-01-01
      • 2011-01-03
      • 2015-10-19
      • 2020-04-24
      • 2011-06-30
      • 2012-07-09
      • 1970-01-01
      相关资源
      最近更新 更多