2009-05-07 7 views
3

Ein Problem, auf das ich in letzter Zeit oft gestoßen bin, ist das Problem, dass meine Moderatorenklassen zu groß werden. Normalerweise kann ich eine reguläre große Klasse zerhacken, ohne einen Schlag zu machen. Aber die Moderatoren sind manchmal ein bisschen schwieriger zu reduzieren, ohne dass der Code schwieriger zu befolgen ist.Was ist eine gute Übung zum Aufteilen von Moderatoren in einem MVP-Schnittstellenmuster, die zu groß geworden sind?

Vor allem, wenn die Seite mit CRUD-orientierten Steuerelementen beginnt. Manchmal teile ich Kontrollen aus, aber wenn sie von anderen Kontrollen beeinflusst werden, ist die Koordinationslogik selbst komplex. Manchmal teile ich Listen- oder Rasterdatenabruf auf, aber manchmal kann das ähnliche Fallstricke haben.

Gibt es Techniken oder Faustregeln oder allgemeine Bereiche, die Sie aus Ihren Referenten umgestalten?

Antwort

9

Ich verwende in der Regel zwei Ansätze:

  1. Extract und delegieren Geschäftsregeln Domain-Klassen.
  2. Partitionieren Sie die Ansicht in logisch verknüpfte Steuerelemente und erstellen Sie dann eine neue Ansichtsschnittstelle für jede Partition. Sie können Ihren Moderator dann auf die gleiche Weise teilen. Wenn die von Ihnen verwendete Plattform Unterformularkomponentengruppen unterstützt (C# -Benutzersteuerelemente, Delphi-Rahmen usw.), ist dies eine leistungsstarke Möglichkeit, wiederverwendbare Steuerelemente zu erstellen.

aktualisieren

Wenn Ansichten spalten, beginne ich normalerweise durch die Schnittstelle Aufspalten und meine Form mehrere Schnittstellen implementieren zu müssen.

public class ComplexForm: Form, ISubView, IOtherSubView 
{ 
    ... 
} 

Dann habe ich den Präsentator in so viele Ansichten aufgeteilt, die ich erstellt habe.

public class SubViewPresenter 
{ 
    private ISubView subView; 
    ... 
} 

public class OtherSubViewPresenter 
{ 
    private IOtherSubView otherSubView; 
    ... 
} 

Sie können einen Schritt weiter gehen und die Umsetzung von ISubView und IOtherSubView zu Bedienelemente bewegen oder es lassen, wie sie ist. Wenn Sie ein passives View-Muster verwenden, ist dies ein Kinderspiel, da das Formular sowieso nur die UI-Logik verarbeitet. Sobald ich den Moderator getrennt habe, versuche ich die direkte Kommunikation zwischen den Moderatoren zu vermeiden. Wenn eine Kommunikation benötigt wird, versuche ich indirekt über Domain-Objekte.

+0

Schöne Antwort. Ich bin gespannt, wie Sie sich dann mit Cross-View, Cross-Presenter-Kommunikation auseinandersetzen, die dies zur Folge haben könnte. Sprechen deine Ansichten und Präsentatoren miteinander? –

+0

Ich habe ein Beispiel hinzugefügt, um die Technik zu demonstrieren. –

+0

Hey vielen Dank, das war eine großartige Antwort –

2

Versuchen Sie, den Code zu extrahieren, der Aktivität außerhalb der Daten an Ihre DAL oder drücken Sie es auf die Ansicht ausführt. Wenn Sie beispielsweise E-Mail-Aktualisierungen durchführen oder Geschäftslogik ausführen müssen, versuchen Sie, diese in separate Klassen zu extrahieren. Ich bin oft mit dem gleichen Problem beschäftigt und habe versucht, so viel Logik wie möglich in die einzelnen Domänen-/Entitätsklassen zu verschieben und dort eine Validierung durchzuführen.

Hoffe, das ist hilfreich.

+0

Schöne Antwort, danke –