vista ventajas que net mvc modelo form estructura ejemplos ejemplo controlador capas asp asp.net-mvc winforms refactoring reusability

asp.net-mvc - ventajas - mvc ejemplos



Reutilizar la arquitectura de MVC; Tener dos capas de UI: ASP.NET MVC y.NET Winforms (2)

Aunque mi pregunta puede parecer abstracta, espero que no lo sea. Supongamos que desarrollo una aplicación, un sitio ASP.NET MVC y luego me encargo de crear un cliente de Winforms para esta aplicación, ¿cuánto y cómo puedo reutilizarlo desde la aplicación existente?

Definí los modelos, definí controladores y vistas. Todos ellos funcionan bien.

Ahora el jefe viene a pedir un cliente de Winforms y espero poder reutilizar los modelos y los controladores (siempre que los coloque en diferentes ensamblajes) y no vuelva a utilizar solo las vistas (vistas ASPX).

Se puede hacer esto? ¿Cómo?


He hecho esto anteriormente, no con asp.net MVC, sino con formularios web asp.net puros. Usé un patrón MVP (Model-View-Presenter) de fabricación casera, y lo más importante para permitir que el Presenter (== Controller en su caso) para ser utilizado en una aplicación WinForms fuera no hacer referencia a nada que ver con el sistema .web

Entonces, lo primero que debe hacer es introducir interfaces para envolver cualquier solicitud, respuesta, etc., y hacer que cada Presentador acepte estas interfaces a través de Dependency Injection (o ponerlas a disposición de los Presentadores mediante alguna otra técnica), luego si el presentador usa esos en lugar de las cosas reales del sistema.

Ejemplo:

Imagine que desea transferir el control de la página A a la página B (que en su aplicación de winforms puede cerrar el formulario A y luego abrir el formulario B).

Interfaz:

public interface IRuntimeContext { void TransferTo(string destination); }

Implementación web:

public class AspNetRuntimeContext { public void TransferTo(string destination) { Response.Redirect(destination); } }

implementación de winforms:

public class WinformsRuntimeContext { public void TransferTo(string destination) { var r = GetFormByName(destination); r.Show(); } }

Ahora el Presentador (Controlador en su caso):

public class SomePresenter { private readonly runtimeContext; public SomePresenter(IRuntimeContext runtimeContext) { this.runtimeContext = runtimeContext; } public void SomeAction() { // do some work // then transfer control to another page/form runtimeContext.TransferTo("somewhereElse"); } }

No he analizado la implementación de asp.net MVC en detalle, pero espero que esto te dé una indicación de que probablemente sea mucho trabajo para habilitar el escenario que estás buscando.

En su lugar, puede considerar aceptar que tendrá que volver a codificar View y Controller para las diferentes plataformas y, en su lugar, concentrarse en mantener sus controladores extremadamente delgados y colocar la mayor parte del código en una capa de servicio que se pueda compartir.

¡Buena suerte!


Eche un vistazo al kit básico de Northwind (no se deje intimidar por el bit de Northwind), que tiene varias GUI conectadas a una arquitectura en capas que incluye tanto MVC como Winforms.

Hace exactamente lo que quieres lograr.