Wie Sie eine Anwendung entwerfen, die in einer modularen Art und Weise?
Ich bin auf der Suche für Hinweise, Anregungen, links, Hinweise, Ideen und auch anekdotisches Konten über ", wie eine Applikation modular". Ich werde die Verwendung von python für dieses Projekt, aber Beratung muss nicht notwendigerweise beziehen sich auf diese Sprache, obwohl ich bin nur bereit, um zu implementieren ein design basierend auf OOP.
Hier ist etwas Kontext, um zu verstehen, Woher ich komme und was ich versuche zu erreichen...
Mein Projekt wird eine kleine Anwendung, die Webdienste und zeigt die Ergebnisse in einer Vielzahl von weisen, einschließlich:
- Benachrichtigungs-popup mit nur dem Ergebnis des Aufrufs von
- Registerkarte im Hauptfenster der Anwendung mit Grafiken von abgerufenen raw-Daten
- Puffer von Nachrichten (sichtbar auf domand), wo die Ergebnisse aus verschiedenen Diensten aufschichten
Wird die Anwendung freigegeben werden free (as-in-speech) software, und aus diesem Grund möchte ich machen es wirklich einfach für andere Entwickler zu schreiben, plugins/Module, das wird erweitern Sie die Funktionalität der Hauptanwendung ohne den core-code.
In diesem Punkt in der Zeit, plugins soll im wesentlichen ermöglichen, die Entwickler aktivieren, einen neuen webservice, durch die Festlegung der Anbieter, die Daten-manipulation (wenn vorhanden) und die Art, wie die Daten dem Benutzer präsentiert werden.
Ich habe umfangreiche Erfahrung in der Entwicklung mit drupal die eine leistungsstarke modulare Ansatz, aber das folgt auch einem nicht-Objekt-orientiertes design, so vermute ich, dass für python, drupal design ist vielleicht nicht die optimale Lösung.
Ist dies von Bedeutung, der Kern wird nativ entwickelt für GNU/Linux.
Vielen Dank im Voraus für Ihre Zeit!
Du musst angemeldet sein, um einen Kommentar abzugeben.
Versuchen zu halten, was lose gekoppelt ist, und die Verwendung von Schnittstellen großzügig zu helfen.
Ich würde das design mit den die Trennung von Bedenken. Die wichtigsten architektonischen Schichten sind:
Den domain-Klassen, die die Arbeit machen, wissen aber nicht über die Benutzeroberfläche. Die Persistenz-Schicht weiß über die domain-Klassen, genug zum laden/speichern, wie erforderlich. Der system-interface-Schicht abstrahiert entfernt externe Systeme, die können Sie stecken Sie einen simulator in hinter beim testen. Die Benutzeroberfläche sollte im Idealfall verwenden Sie MVC, für maximale Flexibilität.
Ohne zu fein einen Punkt auf Sie, würde man normalerweise nicht sehen, um Drupal als Vorbild für gute architektonische Gestaltung. Es hat sich vielmehr organisch aus, und es gab viele Umwälzungen in der Gestaltung, wie dies durch den regelmäßigen Bruch-plugin auf system-upgrades.
Ich würde auch das echo, was MicSim sagte, in Bezug auf sorgfältig entwerfen die plugin-Schnittstelle und schreiben mehrere verschiedene plugins, die es wahrnehmen. Dies ist der einzige Weg, um wirklich Fleisch aus den Fragen, wie die app und die plugins interagieren.
Als Sie liefern einige grundlegende Funktionen mit der app, stellen Sie sicher, dass code, der Teil sollte erweiterbar/austauschbar, bereits als plugin selbst. Dann wirst du am besten ein Gefühl dafür bekommen, wie Ihre API Aussehen soll.
Und zu beweisen, dass die API ist gut, man sollte schreiben, eine zweite und eine Dritte plugin, denn dann werden Sie entdecken, dass Sie eine Menge von Annahmen bei der Erstellung des ersten. Normalerweise werden Dinge klar, etwas nach tun dieses 2. und 3. Schritt.
Nun, Sie sollten schreiben eine weitere plugin, weil die letzten plugins, die Sie schrieb, ähnelt dem ersten Typ, Eingabe von Daten und Präsentation (vielleicht noch ein anderes Wetter-webservice). Wählen Sie etwas, das total verschiedene, mit ganz verschiedenen Daten, und Sie werden sehen, Ihre API wird immer noch zu individuell. (Sonst werden Sie einen guten job gemacht!)
Naja, wohl die erste Stelle zu beginnen ist, um sich hinzusetzen und herauszufinden, was das plug-in benötigen könnten, um Ihren Zweck zu erfüllen.
Würden Sie wollen, zu betrachten die zwei wichtigsten Aspekte in Ihrem design.
Und wahrscheinlich auch, weil das klingt wie ein learning-Projekt.
Ich würde auch empfehlen die Entwicklung einige grundlegende plugins, die beim Entwurf der API. Die Erfahrung, dass Sie tatsächlich nutzen, was Sie design können Sie sehen, wo sich ein bestimmter Ansatz könnte sein, die Dinge schwieriger, als Sie sein müssen.
Blick in die Zuhörer-subscriber-Muster. Früher oder später, Ihre app, die kompliziert genug sind, dass Sie implementieren müssen, um Rückrufe. Wenn Sie getroffen, dass zu begrenzen, verwenden listener-Abonnenten (es gibt eine Implementierung in wxPython).
Beispielsweise mehrere Module wollen zu beobachten, für die neue Daten aus einer Reihe von feeds. Module, die miteinander verknüpft werden vielleicht möchten Sie aktualisieren sich, basierend auf neuen Daten.