asp.net-mvc - refieren - modelo vista controlador ventajas y desventajas
¿Debería ServiceStack ser la capa de servicio en una aplicación MVC o debería llamar a la capa de servicio? (1)
Yo no haría ninguna de las dos cosas.
Idealmente, tanto MVC como ServiceStack deberían usar y compartir dependencias C # puras. Un buen ejemplo de que un sitio web de MVC + ServiceStack SocialBootstrapApi armónicamente es el proyecto de demostración SocialBootstrapApi , que se implementó en AppHarbor en: http://bootstrapapi.apphb.com
Registraría todas sus dependencias en su ServiceStack AppHost y luego registraría una fábrica de MVC Controller para que tanto sus controladores MVC como los servicios de ServiceStack se conecten automáticamente con estas dependencias.
En tu 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 del 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 que usa 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. Los servicios de ServiceStack deberían 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 de C # pura / comprobable para luego preparar la respuesta. en ServiceStack que llenaría el Response DTO, mientras que para un controlador MVC estaría poblando el ViewModel.
Llamar a los servicios de ServiceStack desde un controlador MVC
Aunque quisiera que la funcionalidad de compartir controladores + ServiceStack a través de un servicio C # greet arriba, 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 ServiceStackController
Aunque los ejemplos de MVC Controller heredan de ServiceStackController , no es necesario, pero sí le permite compartir los mismos atributos Session / Caching / Authentication + RequiredRole / RequiredPermission en MVC y ServiceStack.
Consulte MVC PowerPack para conocer otros beneficios que ServiceStack aporta a MVC.
Estoy creando un sitio web de MVC y también tengo la intención de crear una API web para usar tanto en el sitio web como potencialmente por terceros.
Desde los controladores MVC llamaré a una capa de servicio que contendrá lógica de negocios, actuará en modelos de dominio, realizará validación, realizará llamadas de servicio externo 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 tengo la intención de usarlo para la API web; parece más maduro que ASP.NET MVC 4 Web API . Mi pregunta es, ¿debería tener la llamada ServiceStack API en mi capa de servicio anterior, similar a los controladores MVC, o debería convertirla en la capa de servicio, dando servicio tanto a los clientes web como a los controladores MVC?