Frage

Obwohl meine Frage abstrakt erscheinen mag ich hoffe, es ist nicht. Angenommen, ich entwickeln eine Anwendung, eine ASP.NET MVC-Website und später bin ich beauftragt, ein WinForms-Client für diese Anwendung zu erstellen, wie viel und wie kann ich aus der bestehenden Anwendung wiederverwendet werden?

I definiert die Modelle, I definiert Controller und Ansichten. Sie alle arbeiten gut.

Jetzt kommt der Chef für ein WinForms-Client zu fragen und ich hoffe, ich die Modelle und die Controller wieder verwenden kann (sofern ich sie in verschiedenen Baugruppen) und nicht nur die Ansichten (ASPX Ansichten) wiederverwendet werden.

Kann dies geschehen? Wie?

War es hilfreich?

Lösung

Ich habe dies zuvor nicht mit asp.net MVC getan, aber mit reinen asp.net Web-Formularen. Ich benutze ein home-grown MVP (Model-View-Presenter) Muster, und die absolute wichtigste Sache dem Moderator (==-Controller in Ihrem Fall) zu ermöglichen, wurde in einer WinForms-Anwendung verwendet werden, um nicht Referenz alles mit system.web zu tun

Das erste, was Sie tun müssen, ist Schnittstelle einführen (n) jede Anforderung zu wickeln, Antwort, Web usw. Zeug und hat jedes Presenter akzeptiert diese Schnittstellen über Dependency Injection (oder sie durch eine andere Technik, um den Vorführer zur Verfügung stellen ), dann, wenn der Moderator jener eher als die tatsächlichen system.web Sachen verwendet.

Beispiel:

Stellen Sie die Kontrolle übertragen von Seite A auf Seite B wollen (die in Ihrer WinForms-Anwendung Sie A dann offene Form B bilden schließen möchten).

Schnittstelle:

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

Web-Implementierung:

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

winforms Umsetzung:

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

Nun ist der Presenter (Controller in Ihrem Fall):

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");
  }
}

Ich habe nicht an der asp.net MVC Implementierung im Detail aussieht, aber ich hoffe, dass diese Ihnen einige Hinweise gibt, dass es wahrscheinlich eine Menge Arbeit sein wird, das Szenario sind Sie nach zu aktivieren.

Sie können stattdessen die Annahme zu prüfen, dass Sie die Ansicht und Controller für die verschiedenen Plattformen neu Code müssen, und konzentrieren sich stattdessen Ihre Controller extrem dünn und setzen den Großteil des Codes in einer Dienstschicht auf halten das sein kann geteilt.

Good Luck!

Andere Tipps

Haben Sie einen Blick auf der Northwind-Starter-Kit (nicht von dem Nordwind-Bit beirren .) - die verschiedene GUIs an einer geschichteten Architektur einschließlich sowohl MVC und Winforms

hat

Es tut genau das, was Sie erreichen wollen.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top