Frage

Ich erstelle eine Python-Anwendung und möchte sie unter Berücksichtigung von MVC implementieren.Ich wollte Pubsub verwenden, um dies zu erreichen, bin aber auf PureMVC gestoßen.

Könnte mir jemand diese beiden Dinge erklären, die Unterschiede zwischen ihnen und die Auswirkungen der Verwendung des einen gegenüber dem anderen?

War es hilfreich?

Lösung

Ich gehe davon aus, dass Sie sich darauf beziehen pypubsub worüber ich viel weiß (ich bin der Autor ;).Allerdings weiß ich nicht viel darüber PureMVC für Python.

Basierend auf den PureMVC-Dokumenten sind die beiden sehr unterschiedlich.Hier sind einige Unterschiede, die meiner Meinung nach bei der Auswahl von Bedeutung wären, basierend auf dem Durchsuchen der Dokumente und dem Anhören der Präsentation:

  • Lernkurve:
    • Die Einbindung von pypubsub in Ihre App ist einfach:Legen Sie „Nachrichtenthemen“ fest, abonnieren Sie Methoden und Funktionen und fügen Sie Sendenachrichten für diese Themen hinzu.Der Transport der Nachrichten zum Ziel erfolgt automatisch.Die API „Reisegeschwindigkeit“ ist klein:du hast pub.subscribe Und pub.sendMessage zu lernen und das war's.
    • Bei PureMVC müssen Sie etwas über Mediatoren, Befehle, Proxys usw. lernen.Dies sind alles leistungsstarke Konzepte mit erheblicher Funktionalität, die Sie im Voraus erlernen müssen.Möglicherweise müssen Sie sogar ein paar Apps schreiben, bevor Sie vom „Wissen“ über ihren Zweck zum „Verstehen“ gelangen, wann und wie sie verwendet werden.Für eine One-of-App kann sich der Mehraufwand manchmal lohnen.Es lohnt sich höchstwahrscheinlich, wenn Sie viele Anwendungen erstellen, die das Framework verwenden.
  • Auswirkungen auf das Anwendungsdesign:
    • PyPubsub:Entwurfsmuster für anonyme Beobachter.
    • PureMVC:MVC-Architekturmuster.
    • Es gibt keine Klassen, die mit der „Standardverwendung“ von pypubsub verwendet werden können.Meistens müssen Sie Ihre Nachrichten nach Themen klassifizieren und entscheiden, was als Daten enthalten sein soll.Dies kann sich ziemlich organisch entwickeln:Sie benötigen ein neues Dialogfeld und müssen einen Teil seines Status verfügbar machen, sodass sich bei einer Feldänderung eine Beschriftung an einer anderen Stelle ändert:Alles, was Sie tun müssen, ist eine Veröffentlichung in den Dialog und eine Abonnement in den Code einzufügen, der das Label aktualisiert.Wenn überhaupt, können Sie sich mit pypubsub keine Gedanken über das Design machen.Oder besser gesagt, es ermöglicht Ihnen, Ihr Design auf die Funktionalität zu konzentrieren und nicht darauf, Daten von einem Ort zum anderen zu übertragen.
    • Bei PureMVC gibt es viele zu verwendende Klassen. Sie erfordern, dass Sie Ihre Komponenten so entwerfen, dass sie von ihnen abgeleitet werden, sie registrieren und Basisklassenfunktionen implementieren.Es ist nicht offensichtlich, dass Sie Daten einfach von einer Stelle in Ihrer Anwendung veröffentlichen und an einer anderen erfassen können, ohne mehrere neue Klassen zu erstellen und so zu implementieren, dass sie beim Aufruf durch das Framework das Richtige tun.Natürlich wird sich der Mehraufwand (Entwurfszeit) in manchen Fällen lohnen.
  • Wiederverwendbarkeit:
    • Solange eine Komponente dokumentiert, welche Nachrichtenthemen sie veröffentlicht und was sie abhört, kann sie in eine andere Anwendung integriert, in einer Einheit auf ihr Verhalten getestet usw. werden.Wenn die andere Anwendung pypubsub nicht verwendet, kann es einfach hinzugefügt werden und hat keine Auswirkungen auf die Architektur.Nicht alle Anwendungen müssen Pubsub verwenden, es kann nur dort verwendet werden, wo es benötigt wird.
    • OTOH eine PureMVC-Komponente konnte nur in eine Anwendung integriert werden, die bereits auf PureMVC basiert.
  • Testbarkeit:
    • PureMVC erleichtert das Testen durch die Trennung von Bedenken über mehrere Ebenen hinweg:Visuals, Logik, Daten.
    • Während Publish-Subscribe (pypubsub) dies erleichtert, indem es unabhängig von der Ebene zwischen Herausgebern und Verbrauchern trennt.Daher besteht das Testen mit pypubsub darin, dass der Test die von Ihrer Komponente verwendeten Daten veröffentlicht und die von Ihrer Komponente veröffentlichten Daten abonniert.Bei PureMVC hingegen müsste der Test so tun, als ob es sich um visuelle und Datenschichten handelte.Ich weiß nicht, wie einfach das in PureMVC ist.
    • Sobald die Anwendung eine bestimmte Größe erreicht, kann es ohne die richtigen Tools schwierig werden, jedes Publish-Subscribe-System zu debuggen:Es kann schwierig sein, den Pfad von Nachrichten zu verfolgen.Pypubsub bietet Klassen, die dabei helfen (zur Verwendung während der Entwicklung), und Funktionen, die überprüfen, ob Herausgeber und Listener kompatibel sind.
    • Basierend auf PureMVC-Diagrammen scheint es mir, dass ähnliche Probleme auftreten würden:Sie müssten Ihren Weg über Stellvertreter, Befehle und Vermittler und über Fassaden verfolgen, um herauszufinden, warum etwas schief gelaufen ist.Ich weiß nicht, welche Tools PureMVC bereitstellt, um damit umzugehen.
  • Zweck:
    • Beim Beobachtermuster geht es darum, wie Daten über eine Art „Datenbus“ von einem Ort zum nächsten gelangen;Solange Komponenten mit dem Bus verbunden werden können, kann der Zustand ohne Kenntnis der Quelle oder Senke ausgetauscht werden.
    • PureMVC ist ein Architekturmuster:Seine Aufgabe besteht darin, die Beschreibung Ihrer Anwendung im Hinblick auf Ansicht, Kontrolle und Daten zu erleichtern.Dem Modell ist es egal, wie das Steuerelement mit ihm interagiert.Dem Steuerelement ist es egal, wie es angezeigt wird.Die Ansicht benötigt jedoch das Steuerelement, um bestimmte Dienste bereitzustellen, um Benutzeraktionen zu verarbeiten und die gewünschte Teilmenge der anzuzeigenden Daten abzurufen (da normalerweise nicht alle verfügbaren Daten angezeigt werden), und das Steuerelement benötigt das Modell, um bestimmte Dienste bereitzustellen (um Daten abzurufen, zu ändern). bearbeiten, validieren, speichern usw.) und das Steuerelement muss die Ansichtskomponenten zum richtigen Zeitpunkt instanziieren.
  • Gegenseitiger Ausschluss:Basierend auf den Dokumenten kann ich mir keinen Grund vorstellen, der verhindern würde, dass die beiden Bibliotheken in derselben Anwendung verwendet werden.Sie arbeiten auf unterschiedlichen Ebenen, haben unterschiedliche Zwecke und können nebeneinander existieren.

Alle Entkopplungsstrategien haben Vor- und Nachteile, die Sie abwägen müssen.Lernkurve, Return on Investment, Wiederverwendbarkeit, Leistung, Testbarkeit usw.

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