La reutilización de MVC arhitecture;Tienen dos capas de interfaz de usuario :ASP.NET y MVC .NET Winforms

StackOverflow https://stackoverflow.com/questions/124358

Pregunta

A pesar de que mi pregunta puede parecer abstracto, espero que no.Supongamos que desarrollar una aplicación, un ASP.NET MVC sitio y después yo soy el encargado de construir un Winforms cliente para esta aplicación cuánto y cómo puedo reutilizar de la aplicación ya existente?

He definido los modelos, he definido los controladores y vistas.Todos ellos funcionan bien.

Ahora el jefe viene pidiendo un Winforms cliente y tengo la esperanza de que puede volver a utilizar los modelos y los controladores (siempre pongo en las diferentes asambleas) y no reutilizar solamente los puntos de vista ASPX (vistas).

Se puede hacer esto?Cómo?

¿Fue útil?

Solución

He hecho esto antes, no con asp.net MVC, pero con puro asp.net los formularios web.He utilizado un home-grown MVP (Model-View-Presenter) patrón, y la absoluta cosa más importante para permitir que el Presentador (== Controlador en su caso), para ser utilizado en una aplicación WinForms fue a no de referencia nada que hacer con el sistema.web

Así que la primera cosa que usted necesita hacer es introducir la interfaz(s) para envolver cualquier petición, respuesta, web, etc cosas, y cada Presentador aceptar estas interfaces a través de la Inyección de Dependencia (o ponerlos a disposición de los Presentadores por alguna otra técnica), si el Presentador utiliza aquellos que en el actual sistema.cosas web.

Ejemplo:

Imagina que quieres transferir el control de la Página a a la Página B (que en su aplicación winforms puede que desee cerrar formulario a continuación, abra el formulario B).

Interfaz:

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

web de la aplicación:

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

winforms aplicación:

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 mirado el asp.net MVC aplicación en detalle, pero espero que esto te da alguna indicación de que probablemente será una gran cantidad de trabajo para permitir el escenario que usted está después.

Su lugar puede que desee considerar la aceptación que va a tener que re-código de la Vista y el Controlador, para las diferentes plataformas, y en lugar de concentrarse en mantener sus controladores extremadamente delgada y poniendo la mayor parte de su código en una capa de servicios que pueden ser compartidos.

Buena Suerte!

Otros consejos

Eche un vistazo a la Neptuno starter kit (no se deje intimidar por el Neptuno bits)- que tiene varias interfaces gráficas de usuario conectado a una arquitectura de capas, incluyendo tanto MVC y Winforms.

Hace exactamente lo que usted quiere lograr.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top