Frage

Ich bin mit dem Model-View-Presenter-Muster für eine Webseite. Sollte der Moderator der Session darüber im Klaren sein oder sollte nur die Ansicht sich bewusst sein das?

ich denke, was ich hinaus will ist, dass Konzepte wie Session sehr an die Architektur der Ansicht verwendet, so sollten sie von der Ansicht verwenden begrenzt werden? Ansonsten, was passieren würde, wenn ich den Moderator auf eine ähnliche Seite auf einer anderen Architektur (oder brauche ich nicht zu befürchten, dass, wenn ich Pläne, dies zu tun) wieder zu verwenden wollte?

War es hilfreich?

Lösung

Ich bin so etwas wie dies zu tun in meinem MVP Implementierung ich injizieren ein ICookieManager, ISessionManager, ICacheManager, IConfigurationManager, IRedirector in meine Moderator, die von Klassen implementiert werden, die die Funktionalität für diese wickeln.

Dies ermöglicht einen Moderator in dem Sie Versionen dieses in verspottet injizieren, und Sie haben keine direkten Abhängigkeiten auf der asp.net Laufzeit in Ihrem Moderator so macht es Tests zu erleichtern.

Prost

Andere Tipps

Es könnte sogar ein gemeinsames Modul sein, das als Wrapper fungiert in welche auch immer Sitzung, die Sie verwenden. Auf diese Weise wäre es für alle Controller verfügbar sein und Sie könnten die physische Umsetzung der Sitzung einfach ändern.

Ihr Moderator würde die Ansicht füllt mit dem, was der Controller aus der Sitzung geholt.

Vielen Dank für Ihre Antworten jeden, so zusammenzufassen ...

Sagen wir, dass tatsächlich der Moderator sollte die Lage sein, den Zugriff auf Daten von Sitzung (vorzugsweise über eine Schnittstelle) und das die Ansicht, dass nicht darauf zugreifen soll (noch stumm)?

Abhängig welches Objekt Sie versuchen zu verwenden neu oder anders enthält den größten Teil der Geschäftslogik.

Ich würde davon ausgehen, nur der Moderator der Sitzung wissen sollte, wie das Objekt die nächste Sache zu einem Controller in MVP ist.

Ja, wie Taube sagt, wickeln, was die Session in einer anderen Klasse zugreift.

Das bedeutet, dass Sie eine Mock-Klasse dieser Art unterschiedliche Werte für Session simulieren injizieren können.

Um Ihre Frage zu beantworten, genauer gesagt, ich neige dazu, für das Supervising-Presenter-Muster zu gehen ( http: / /martinfowler.com/eaaDev/SupervisingPresenter.html ), das hält die Ansichten als sehr dumm. Also nur der Moderator würde die Session zugreifen (wenn auch nicht direkt wie ich schon sagte) und der Ansicht sagen, was zu tun ist.

Ich bin die Erforschung passive MVP Ansätze, auch. Ich habe ein paar Sachen auf dem Netz getan gesehen, von denen beide Sitzungspersistenz bis zu der Ansicht verlassen -. Entweder durch Injektion, wie Taube erwähnt, oder explizites Management

Dependency Injection Beispiele hier zu sehen ist: http://www.codeproject.com /KB/aspnet/Advanced_MVP.aspx und hier: http : //geekswithblogs.net/opiesblog/archive/2006/06/30/83743.aspx . Der Trick hier ist alle Sitzungs Instanzen in einer statischen Variablen zu verwalten, und verhindern, dass sie sich gegenseitig überschreiben. (Ich bin nicht sicher, ob das erste Beispiel erreicht dies richtig.)

Der zweite Ansatz ist hier: http: / /codebetter.com/blogs/jeffrey.palermo/archive/2005/03/28/128592.aspx . In diesem Beispiel weiß die Ansicht, wie seinen Zustand zu speichern. Der Nachteil ist, dass jedes Mal, wenn der Moderator Daten in den Blick bringt es eine Update-Methode auf der Ansicht aufrufen müssen Rebinding zu erzwingen. Dies ist nicht in den obigen Beispielen benötigt, aber Sie brauchen nicht eine Tabelle von Sitzungen zu verwalten. Ich bin nicht sicher, wie dieser Ansatz Tests erschwert Werkzeuge mit spöttischen.

Die Spitze ist jede Verbrauchseinheit zu verbinden. Es macht den Moderator und das Modell einfacher zu testen mit spöttischen und die Tests auf das Verhalten konzentrieren.

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