wake-up-neo.com

Implementierung von MVC mit Windows Forms

Wo finde ich ein gutes Beispiel für die vollständige Implementierung des MVC-Musters in Windows Forms?

Ich habe viele Tutorials und Codebeispiele auf verschiedenen Sites gefunden (zum Beispiel The Code Project und .NetHeaven), aber viele sind repräsentativer für das Beobachtermuster als MVC. Da die Anwendung, die ich entwickeln möchte, für ein Schulprojekt bestimmt ist, zögere ich, Frameworks wie PureMVC oder MVC # zu verwenden.

101
kjv

Ich bin der Ansicht, dass Bewerbungen so unterschiedlich sind, und unser Verständnis, wie Bewerbungen geschrieben werden sollten, ist immer noch sehr begrenzt. Bisherige Windows Forms-Anwendungen, an denen ich gearbeitet habe, waren so unterschiedlich. Einige der Designunterschiede, die ich gesehen habe, sind (einschließlich der meisten Kombinationen):

  • Direkt mit der Datenbank sprechen (2 Ebenen)
  • Verwenden Sie ein Backend, das für die jeweilige Anwendung geschrieben wurde (3 Tier).
  • Verwenden Sie eine Reihe von Webdiensten, die für die Verwendung durch viele Anwendungen geschrieben wurden und für Ihre Anwendung nicht geändert werden können. (Serviceorientierte Architektur)
  • Aktualisierungen erfolgen durch ROHE Operationen
  • Aktualisierungen erfolgen mit Befehlsmuster (Senden von Befehlen an den Backend-Server)
  • Viele Verwendungen von Datenbindung /keine Verwendungen von Datenbindung
  • Die meisten Daten sind tabellarisch (z. B. Rechnungen) und funktionieren gut in Standardrastersteuerelementen. Für die meisten Benutzeroberflächendaten sind benutzerdefinierte Steuerelemente erforderlich.
  • Ein Entwickler/Teams von 10 oder 20 Entwicklern (nur auf der Benutzeroberfläche)
  • Viele Unit-Tests mit Mocks etc/keine Unit-Tests

Daher glaube ich nicht, dass es möglich ist, eine Implementierung von MVC (oder MVP) zu erstellen, die immer gut passt.

Die besten Beiträge, die ich wirklich gesehen habe , erklären MVC und warum ein MVC-System ist so gebaut wie es ist, ist die "Build Your Own CAB" -Serie von Jeremy D Miller . Nach der Arbeit sollten Sie in der Lage sein, Ihre Optionen viel besser zu verstehen. Microsoft Smart Client Guidance (CAB/Microsoft Composite Application Block) sollte ebenfalls berücksichtigt werden. Es ist ein bisschen komplex, aber es kann gut für Anwendungen funktionieren, die eine gute Passform haben.

Auswählen eines MVC/MVP-Implementierung für ein Winforms-Projekt Geben Sie einen lesenswerten Überblick. Viele Leute mögen PureMVC . Ich habe es nie benutzt, aber ich würde es mir ansehen, wenn ich das nächste Mal ein MVC-Framework benötige.

" Presenter First " ist ein Softwareentwicklungsansatz, der die Ideen des Model View Presenter (MVP) -Designmusters und testgetriebene Entwicklung kombiniert. Sie können damit beginnen, indem Sie Tests in der Sprache des Kunden schreiben. Beispielsweise:

"Wenn ich auf die Schaltfläche 'Speichern' klicke, sollte die Datei gespeichert werden und die Warnung zu nicht gespeicherten Dateien sollte verschwinden."

Ich habe keine Erfahrung mit "Presenter First", aber ich werde es versuchen, wenn ich die Gelegenheit dazu bekomme, da es sehr vielversprechend aussieht.

Weitere Fragen zum Stapelüberlauf sind hier und hier .

Wenn Sie darüber nachdenken [~ # ~] wpf [~ # ~] zu einem beliebigen Zeitpunkt zu verwenden, werfen Sie einen Blick auf Modellansicht) ViewModel (MVVM) Muster. Hier ist ein sehr gutes Video, das Sie sich ansehen sollten: Jason Dolinger auf Model-View-ViewModel .

MVVM (Model View View Model) Entwurfsmuster für Winforms Geben Sie eine weitere Option an, die die Konvertierung in WPF bei Bedarf vereinfacht. Magical.Trevor ist ein weiteres MVVM-Beispiel für Windows Forms, das auch die automatische Bindung basierend auf Eigenschaftsnamen enthält.


Fragen Sie sich auch , warum Sie MVC verwenden.

  • Möchten Sie in der Lage sein, so viel Code wie möglich zu testen?
  • Versuchen Sie, so viel Code wie möglich wiederverwenden zu lassen?
  • Versuchen Sie, Ihre Codebasis leicht verständlich zu machen?
  • 101 andere Gründe, die für ein bestimmtes Projekt gelten können.

Sobald Sie sich über Ihre Ziele klar sind , wird es einfacher, die eine oder andere Implementierung auszuwählen.

113
Ian Ringrose

UPDATE: Zusätzlich zu meiner vorherigen Antwort schlage ich vor, den "Presenter First" -Ansatz zu lesen (insbesondere die PDF Artikel)

Ich würde MVP (eigentlich PassiveView-Muster) anstelle von MVC empfehlen. Sie brauchen dafür keine speziellen Frameworks, sondern nur die Art und Weise, wie Sie Ihren Code organisieren.

Ein Ansatz (den ich normalerweise verfolge) besteht darin, jedes Fensterformular in drei Einheiten aufzuteilen:

  1. Eine Presenter/Controller-Klasse - mit dieser Klasse beginnen Sie beim Entwickeln eines Formulars. Hier sollte sich der größte Teil Ihrer Geschäftslogik befinden.
  2. Eine Ansichtsschnittstelle (IView), die die Methoden, Eigenschaften und Ereignisse enthält. Diese Schnittstelle ist alles , was der Präsentator über Ihr Formular weiß.
  3. Am Ende, wenn Sie die Implementierung des Presenters und der Ansicht (einschließlich Unit-Tests) abgeschlossen haben, können Sie die eigentliche Formularklasse erstellen und die IView-Schnittstelle implementieren. Dann müssen Sie dem Formular nur noch die entsprechenden Steuerelemente hinzufügen und sie mit der Schnittstelle verbinden.

Beispielcode (ein einfacher Pseudocode, nur zur Veranschaulichung):

interface IView
{
    string Username { get; set; }
    string Password { get; set; }

    event EventHandler LogOnButtonClicked;

    void InformUserLogOnFailed();
    void MoveToMainScreen();
}

class Presenter
{
    public Presenter(IView view)
    {
        this.view = view;
        view.LogOnButtonClicked += new EventHandler(OnLogOnButton);
    }

    private void OnLogOnButton()
    {
        // we ask some service to verify the username/password
        bool isLogOnOk = logOnService.IsUserAndPasswordOk(view.Username, view.Password);
        if (isLogOnOk)
            view.MoveToMainScreen();
        else
        {
            view.Username = "";
            view.Password = "";
            view.InformUserLogOnFailed();
        }
    }

    private IView view;
}

class Form : IView
{
    public Form()
    {
        presenter = new Presenter(this);
    }

    public string Username
    {
        get { return TextBoxUsername.Text; }
        set { TextBoxUsername.Text = value; }
    }

    public string Password
    {
        get { return TextBoxPassword.Text; }
        set { TextBoxPassword.Text = value; }
    }

    public void InformUserLogOnFailed()
    {
        MessageBox.Show("Invalid username or password.");
    }

    public void MoveToMainScreen()
    {
        // code for opening another form...
    }

    private Presenter presenter;
}
45
Igor Brejc

Hast du dir PureMVC angesehen? Ich habe festgestellt, dass sich niemand darauf einigen kann, wie MVC wirklich aussieht, wenn sie mit der Erstellung einer bestimmten Implementierung beginnen.

Update: Sie können Ihr eigenes erstellen, indem Sie mit etwas Einfacherem wie MobileMVC beginnen. Compact Framework-Code sollte unter Windows kompiliert/ausgeführt werden können. Da dies eine Schulaufgabe ist, würde ich vorschlagen, dass Sie einige Zeit damit verbringen, zu lernen, wie MVC tatsächlich funktioniert.

6
Brian Lyttle

Vielleicht möchten Sie einen Blick auf Differential Execution werfen.

Hier ist es in SourceForge

IMO, es ist eine enorme Verbesserung gegenüber MVC, obwohl es immer noch ziemlich ungewöhnlich ist.

3
Mike Dunlavey

Ein gutes Beispiel für die Implementierung von MVC in Windows Forms finden Sie hier: hier . Quellcode ist enthalten.

Wenn Sie Code für diese Aufgabe lesen, studieren und schreiben, werden Sie feststellen, dass es viele Meinungsverschiedenheiten darüber gibt, wie MVC implementiert werden sollte. Dies ist ein einfacher Fall, der die Trennung von Bedenken widerspiegelt, sowie ein gutes Beispiel für die "Installation", die erforderlich ist, um dies zu verbinden.

Wenn Sie nicht zur Schule gehen, möchten Sie wahrscheinlich auf einen Rahmen zurückgreifen, wie ihn die anderen Poster empfohlen haben.

2
Gary.Ray

Der Microsoft Composite Interface Application-Block wurde als MVC-Implementierung gestartet (unter anderem als implementiertes Pattern). Die Release-Version entwickelte sich jedoch zu einer MVP-Implementierung, die als eine Art andere Interpretation des MVC-Konzepts angesehen werden kann.

Wenn Sie bereit sind, den Code einer sehr vollständigen (und irgendwie komplexen) MVP-Implementierung zu überprüfen, finden Sie das MS-CAB als eine der Komponenten von Microsoft Smart Client Software Factory. Es kommt mit Quellcode. Sie finden es hier . Viel Glück!

2
Rui Craveiro