Frage

Ich suche nach Zeigern, Vorschlägen, Links, Warnungen, Ideen und sogar anekdotischen Berichten "So entwerfen Sie eine Anwendung modular". Ich werde Python für dieses Projekt verwenden, aber Ratschläge müssen nicht unbedingt auf diese Sprache verweisen, obwohl ich nur bereit bin, ein auf OOP basierendes Design zu implementieren.

Hier ist ein Kontext, um zu verstehen, woher ich komme und was ich zu erreichen versuche ...


Mein Projekt wird eine kleine Anwendung sein, die Webdienste verbraucht und die Ergebnisse auf vielfältige Weise anzeigt, einschließlich:

  • Benachrichtigungspopup mit nur dem Ergebnis des Anrufs
  • Registerkarte im Hauptfenster der Anwendung mit Grafiken, die aus abgerufenen Rohdaten aufgezeichnet wurden
  • Puffer von Nachrichten (auf Domand sichtbar), bei denen sich die Ergebnisse aus verschiedenen Diensten entzünden

Die Anwendung wird als kostenlose Software (AS-In-Speech) veröffentlicht, und aus diesem Grund möchte ich Machen Sie es anderen Entwicklern wirklich einfach, Plugins/Module zu schreiben Dadurch wird die Funktionalität der Hauptanwendung erweitert, ohne den Kerncode zu ändern.

Zu diesem Zeitpunkt, Plugins sollten es einem Entwickler im Wesentlichen ermöglichen, einen neuen Webservice zu aktivieren, indem der Anbieter definiert wird, die Datenmanipulation (falls vorhanden) und die Art und Weise, wie die Daten dem Benutzer präsentiert werden.

Ich habe umfangreiche Erfahrung in der Entwicklung mit Drupal Dies hat einen leistungsstarken modularen Ansatz, aber auch ein nicht-objektorientiertes Design. Daher vermute ich, dass für Python das Drupal-Design möglicherweise nicht die optimale Lösung ist.

Wenn dies von Bedeutung ist, wird der Kern für GNU/Linux nativ entwickelt.

Vielen Dank im Voraus für Ihre Zeit!

War es hilfreich?

Lösung

Versuchen Sie, die Dinge locker gekoppelt zu halten, und verwenden Sie die Schnittstellen großzügig, um zu helfen.

Ich würde das Design mit dem beginnen Trennung von Bedenken. Die wichtigsten architektonischen Schichten sind:

  • Problemdomäne (auch bekannt als Engine, Back-End): Die Domänenklassen, die alle tatsächlichen Arbeiten erledigen, haben Domänenwissen implementieren Domänenverhalten implementieren
  • Persistenz: Speicherverwaltung für Domänenklassen, Datenbank/Dateisystemschicht
  • Benutzeroberfläche: Die GUI, die mit den Domänenklassen spricht
  • Systemschnittstellen: Gespräch mit anderen Systemen, z. Networking, Webdienste

Die Domänenklassen erledigen die Arbeit, wissen aber nichts über die Benutzeroberfläche. Die Persistenzschicht kennt die Domänenklassen aus, um nach Bedarf zu speichern/zu laden. Die System -Schnittstellenschicht fasst externe Systeme ab, mit denen Sie beim Testen einen Simulator hinter sich bringen können. Die Benutzeroberfläche sollte idealerweise MVC für maximale Flexibilität verwenden.

Ohne zu gut zu sagen, würde man Drupal normalerweise nicht als Beispiel für ein gutes architektonisches Design aussehen. Es ist eher organisch gewachsen, und es gab viele Umwälzungen des Designs, wie der reguläre Plugin -Bruch bei Systemaufrüstungen zeigt.

Ich würde auch wiedergeben, was Micsim sagte, dass sie die Plugin -Schnittstelle sorgfältig entwerfen und mehrere verschiedene Plugins zum Ausüben schreiben. Dies ist der einzige Weg, um die Probleme der Interaktion der App und der Plugins wirklich zu erfassen.

Andere Tipps

Stellen Sie sicher, dass Sie die grundlegende Funktionalität mit Ihrer App liefern, sicher, dass Sie den Teil, das bereits als Plugin selbst erweiterbar/austauschbar sein sollte, produziert. Dann werden Sie am besten ein Gefühl darüber bekommen, wie Ihre API aussehen sollte.

Und um zu beweisen, dass die API gut ist, sollten Sie ein zweites und drittes Plugin schreiben, denn dann werden Sie feststellen, dass Sie beim Schreiben des ersten viele Annahmen getroffen haben. Normalerweise klärt sich die Dinge nach dem 2. und 3. Schritt ein wenig auf.

Jetzt sollten Sie ein weiteres Plugin schreiben, da die letzten Plugins, die Sie geschrieben haben, dem ersten in Typ, Eingabedaten und Präsentation ähneln (möglicherweise ein weiteres Wetter -Webservice). Wählen Sie mit absolut unterschiedlichen Daten etwas ganz anderes aus, und Sie werden sehen, dass Ihre API immer noch zu maßgeschneidert ist. (Sonst hast du gute Arbeit geleistet!)

Nun, wahrscheinlich ist der erste Ort, um sich zu setzen und herauszufinden, was das Plug-In möglicherweise benötigt, um seinen Zweck zu erfüllen.

Sie möchten zwei Hauptaspekte in Ihrem Design berücksichtigen.

  • Wie werden Ihr Framework Anfragen / Empfangsantworten aus dem Plug-In übergeben?
  • Welche Helferklassen oder -Module sind möglicherweise gut zu bieten?

Und wahrscheinlich auch, da dies nach einem Lernprojekt klingt.

  • Was möchten Sie selbst schreiben und was freuen Sie sich, nur aus einer vorhandenen Bibliothek herauszuwählen?

Ich würde auch empfehlen, einige grundlegende Plugins beim Entwerfen der API zu entwickeln. Die Erfahrung, tatsächlich das zu verwenden, was Sie entwerfen, ermöglichen es Ihnen, zu erkennen, wo ein bestimmter Ansatz die Dinge schwieriger macht, als sie sein müssen.

  • Entwerfen Sie die API für Ihre App sorgfältig (Wie man eine gute API entwirft und warum sie wichtig ist)
  • Machen Sie alles, was unabhängig ein Modul verwendet werden könnte, gruppieren und bauen größere Teile aus den einfachen Teilen (Kuss).
  • Wiederhole dich nicht (trocken)
  • Schreiben/veröffentlichen kurze Dokumentation häufig für sich und andere (Open -Source -Mantra) ...

Schauen Sie sich das Hörer-Subscriber-Muster an. Früher oder später ist Ihre App komplex genug, um Rückrufe zu implementieren. Wenn Sie dieses Grenzwert treffen, verwenden Sie Listener-Subscriber (es gibt eine Implementierung in WXPython).

Beispielsweise möchten mehrere Module nach neuen Daten aus einer Reihe von Feeds achten. Module, die zusammen verknüpfen, möchten sich möglicherweise auf der Grundlage neuer Daten aktualisieren.

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