¿ServiceStack debe ser la capa de servicio en una aplicación MVC o debe llamar a la capa de servicio?
Estoy creando un sitio web MVC y también tengo la intención de crear una API web para su uso tanto dentro del sitio web y potencialmente por terceros.
Desde los controladores MVC llamaré a una capa de servicio que contendrá lógica de negocios, actuará sobre modelos de dominio, realizará validación, realizará llamadas a servicios externos de infraestructura, etc. La capa de servicio, a su vez, llamará a los repositorios para cualquier interacción con la base de datos.
Ahora, me gusta el aspecto de ServiceStack y la intención de usándolo para la Web API-parece más maduro que el ASP.NET MVC 4 Web API . Mi pregunta es, ¿debo tener la llamada de la API ServiceStack en mi capa de servicio anterior, similar a los controladores MVC, o debo convertirla en la capa de servicio, dando servicio tanto a los clientes web como a los controladores MVC?
1 answers
No haría ninguna de las dos cosas.
Idealmente tanto MVC como ServiceStack deberían usar y compartir dependencias puras de C#. Un buen ejemplo de un sitio web MVC + ServiceStack viviendo armoniosamente juntos es en el proyecto de demostración SocialBootstrapApi , que se ha desplegado en AppHarbor en: http://bootstrapapi.apphb.com
Registraría todas sus dependencias en su ServiceStack AppHost y luego registraría un MVC Controller factory para que tanto sus Controladores MVC como Los servicios ServiceStack se conectan automáticamente con estas dependencias.
En su 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));
}
Ejemplo de servicio ServiceStack usando IGreeter
public class HelloService : Service {
public IGreeter Greeter { get; set; } //Autowired
public HelloResponse Get(Hello request) {
return new HelloResponse {
Result = Greeter.SayHelloTo(request.Name) };
}
}
Ejemplo de Controlador MVC usando el mismo IGreeter:
public HelloController : ServiceStackController {
public IGreeter Greeter { get; set; } //Autowired
public void Index(string name) {
ViewBag.GreetResult = Greeter.SayHelloTo(name);
return View();
}
}
La idea general es para la lógica dentro de los controladores MVC y los servicios ServiceStack deben preocuparse por la capa HTTP/punto de integración, es decir, recopilar la entrada del usuario de las variables QueryString o FORM POST'ed y llamar a la lógica C # pura / comprobable con ella preparando la Respuesta, en ServiceStack que estaría rellenando el DTO de respuesta mientras que para un Controlador MVC estaría rellenando el ViewModel.
Llamando a servicios ServiceStack desde un Controlador MVC
Aunque tendría la funcionalidad de compartir Controladores + ServiceStack a través de un servicio de saludo C # anterior, también puede llamar a un servicio ServiceStack desde un controlador MVC como:
public HelloController : ServiceStackController {
public void Index(string name)
{
using (var helloService = AppHostBase.ResolveService<HelloService>())
{
ViewBag.GreetResult = helloService.Get(name).Result;
return View();
}
}
}
Compartir Sesión / almacenamiento en caché con el ServiceStackController
Aunque el MVC Los ejemplos de controladores heredan del ServiceStackController, no es necesario pero le permite compartir los mismos atributos Session / Caching / Authentication + RequiredRole/RequiredPermission en MVC y ServiceStack.
Ver el MVC PowerPack para otros beneficios que ServiceStack trae a MVC.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2013-10-08 05:19:24