Frage

Ich wollte nur sehen, ob ich Ihre Gedanken über die Gestaltung von etwas Arbeit haben könnte ich zur Zeit tue.

Hier ist die aktuelle Situation - Grundsätzlich gilt:

  • Ich bin eine Reihe von Kontrollen für unsere Anwendungen zu entwickeln.
  • Einige von diesen beiden verwendet werden können, in WinForms und ASP.NET Web-Anwendungen.
  • Ich bin auf einem konstantes Bemühen meine Tests und Testbarkeit von meinem Code zu verbessern.

So, hier ist das, was ich getan habe:

  • die Kernsteuerlogik in einer Klasse geschaffen, die kein Konzept eines UI hat. Es stellt sich einfach Ereignisse, wenn die Dinge ändern. Alle Daten wie gespeichert, wie benutzerdefinierte Objekte eingegeben, wo es braucht, von anderen zu unterscheiden (zum Beispiel habe ich eine PagingControl wo es SelectedPage und PageNumber Artikel hat).
  • Ich habe dann eine abstrakte Klasse, die als Schnittstelle für eine Rendering „Motor“ zu handeln. Dadurch wird sichergestellt, dass alle benutzerdefinierten Typen verwendet (und möglicherweise hinzugefügt) zur Kernlogik werden vom Motor behandelt. Nach dem obigen Beispiel enthält eine abstrakte Methode RenderSelectedPage.
  • ich dann konkrete Implementierungen des abstrakten Rendering-Engine erstellt (z ConsoleRenderingEngine, HtmlRenderingEngine etc.). Diese dann behandelt die Methoden und machten sie zu ihren jeweiligen UI / Ausgänge als angemessen.

Ich fand das folgende Pro-und Nachteile dieses Ansatzes:

Pro

  • Es funktioniert. Ganz gut, ist es einfach einen neuen Rendering-Mechanismus zu implementieren, alles, was Sie tun, ist die abstrakte Motorunterklasse und machen die Ausgabe (die erforderlichen Hinweise auf Dich geht).
  • Es ist seperates wirklich die Benutzeroberfläche vom Kern-Code, es viel leichter zu testen .
  • Offensichtlich aufgrund der Verkapselung von Kern / Rendering-Logik, es ist ziemlich offensichtlich, wo die Probleme liegen, wenn sie erscheinen.

    Con

  • können aussehen verwirrend / aufgebläht. Auch wenn es nicht eine große Menge an Code in jeder Klasse ist, gibt es 3x Klassen, um es auf 1 Ausgang (1x Kern, 1x Schnittstelle, 1x Renderer) zu machen. Wenn jedoch die WinForms Schaffung / WebForms steuert es bedeutet auch eine andere classe (da man Control sowie die AbstractRenderingEngine sublcass benötigt).

... OK so ist, dass die einzige „con“ ich wirklich denken kann, und der Hauptgrund für diese Frage ^ _ ^

So

Was sind Ihre Gedanken über das „Muster“? Wie würden Sie es ändern / verbessern?


Diese Frage kann aktualisiert werden, da mehr Gedanken zu uns kommen, oder Klarheit angefordert werden kann (ich weiß, es ist eine schwere Lektüre!).


Update

Danke für die Antworten Jungs, lustig Sie sagte MVP, ich dachte, dass ich so etwas wie dieses irgendwo gesehen hatte, konnte aber für das Leben von mir nicht mehr, was es war! Sobald ich „MVP“ sah, dachte ich „dammit“. : D

Danke für die Antworten Jungs. Ich werde MVP mehr studieren und sehen, ob ich verbessern kann, was ich habe weiter.

War es hilfreich?

Lösung

Aus Ihrer Beschreibung ist es ein bisschen wie, wie ich MVP aber mit den Ereignissen in die andere Richtung.

Ich habe in der Regel eine sehr dünne Ansicht, die hinter einer Schnittstelle verbirgt und dass weiß nichts über den Vortragenden. Der Blick ist derjenige, die Ereignisse auf Benutzeraktionen wirft. Normalerweise werden alle die Ansicht tut, ist UI übersetzt spezifisch für Primitive oder manchmal Wertobjekte aus dem Modell (Wertobjekt in einem ddd Sinne, nicht .net structs) Manchmal habe ich Nest Ansichten für komplexere Situationen und zur Wiederverwendung. Benutzersteuerelemente manchmal ihre eigene Sicht und Moderator Struktur haben. Wenn Sie nisten Ansichten tun beginnen und Moderatoren Instanziierung von Objekten beginnt immer eine Menge Arbeit, so dies in der Regel, wenn ich für einen IoC-Container beginnen suchen.

Der Moderator weiß um die Ansicht durch Schnittstelle ist und spricht direcly zu. Es reagiert Ereignisse anzeigen und hat die meisten der Logik. Die Ansicht und Modell werden in den Präsentator Di'd so die gesamte Logik darin ist prüfbar.

Ein weiterer Ansatz, den ich sah, war, wo der Blick über den Vortragenden kannte und der Moderator wusste nur über die Aussicht über die Schnittstelle. Das spricht sich herum, die für Aktionen Ansicht Ereignisse zu erhöhen, weil der Blick direkt auf den Vortragenden sprechen. (Ich denke, das ist es, was MVC in der smalltalk Welt verwendet werden, um genannt) Der Moderator noch prüfbar ist und dies ermöglicht es Ihnen, Datenbindung aus der Sicht auf den Vortragenden zu tun. Ich esse normalerweise nicht verwenden, so Databinding für mich kein großer Vorteil ist. Ich abzukoppeln Sachen ein bisschen mehr wie im ersten Beispiel.

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