应该ServiceStack是在MVC应用程序的服务层还是应该拨打服务层?应该ServiceStac

2019-05-14 01:47发布

我创建一个MVC网站,并打算建立两个网站中,并可能通过第三方使用网络API。

从MVC控制器我会打电话到其中将包含业务逻辑,对领域模型行动,执行验证,使基础设施的外部服务呼叫等。反过来,服务层将调用库的任何数据库交互的服务层。

现在,我喜欢的外观ServiceStack并打算使用它为Web API -它似乎更成熟比ASP.NET MVC 4的Web API 。 我的问题是,我应该有ServiceStack API调用到我的服务层之上,类似于MVC控制器,或者我应该让服务层,既提供服务的Web客户端和MVC控制器?

Answer 1:

我会做的都不是。

理想情况下MVC和ServiceStack都应该使用和共享纯C#的依赖。 一个MVC + ServiceStack网站生活的一个很好的例子交融在一起是在SocialBootstrapApi示范项目,该项目已在部署上AppHarbor: http://bootstrapapi.apphb.com

我会注册您的所有依赖于你的ServiceStack APPHOST然后注册一个MVC控制器工厂所以无论你的MVC控制器和ServiceStack服务获得自动有线与这些相关性。

在您的APPHOST:

void Configure(Funq.Container container) {
    container.Register<IGreeter>(c => new Greeter());
    //Set MVC to use the same Funq IOC as ServiceStack
    ControllerBuilder.Current.SetControllerFactory(
       new FunqControllerFactory(container));
}

使用ServiceStack服务的示例IGreeter

public class HelloService : Service {
    public IGreeter Greeter { get; set; } //Autowired

    public HelloResponse Get(Hello request) {
        return new HelloResponse { 
           Result = Greeter.SayHelloTo(request.Name) };
    }
}

使用相同IGreeter MVC控制器的实施例:

public HelloController : ServiceStackController {
    public IGreeter Greeter { get; set; } //Autowired

    public void Index(string name) {
       ViewBag.GreetResult = Greeter.SayHelloTo(name);
       return View();
    }        
}

总的想法是为MVC控制器和ServiceStack服务内部逻辑应与HTTP层/积分点即从查询字符串收集用户输入或FORM POST'ed变量和调用与它纯/可测试的C#逻辑然后制备反应予以关注,在ServiceStack将被填充响应DTO,同时为MVC控制器,你会被填充视图模型。

从MVC控制器调用ServiceStack服务

虽然我会通过一个C#迎接服务控制器+ ServiceStack共享功能上面,你也可以拨打从MVC控制器ServiceStack服务,如:

public HelloController : ServiceStackController {

  public void Index(string name) 
  {
    using (var helloService = AppHostBase.ResolveService<HelloService>())
    {
       ViewBag.GreetResult = helloService.Get(name).Result;
       return View();
    }
  }        
}

共享会话/缓存与ServiceStackController

虽然MVC控制器的例子来自继承ServiceStackController ,这是没有必要的,但允许你共享相同的会话/缓存/认证+ RequiredRole / RequiredPermission在MVC和ServiceStack属性。

见MVC的PowerPack为ServiceStack带来MVC其他好处。



文章来源: Should ServiceStack be the service layer in an MVC application or should it call the service layer?