Comment concevoir une application de façon modulaire?
Je suis à la recherche pour obtenir des conseils, des suggestions, des liens, des avertissements, des idées et même anecdotical comptes sur "comment concevoir une application de façon modulaire". Je vais utiliser python pour ce projet, mais les conseils ne doivent pas nécessairement se référer à cette langue, bien que je ne suis disposé à mettre en œuvre une conception basée sur la programmation orientée objet.
Contexte pour comprendre d'où je viens et ce que je suis en train de réaliser...
Mon projet sera une petite application qui va consommer des services web et afficher les résultats dans une variété de façons, y compris:
- popup de notification contenant seulement le résultat de l'appel
- onglet dans la fenêtre principale de l'application avec des graphismes tracées à partir de récupéré des données brutes,
- tampon de messages (visible sur domand) où les résultats provenant des différents services s'accumule
L'application seront publiés sous forme libre (comme dans le discours) de logiciels, et pour cette raison je voudrais le rendre vraiment facile pour les autres développeurs à écrire des plugins/modules qui permettra d'étendre les fonctionnalités de l'application principale, sans avoir à modifier le code de base.
À ce point dans le temps, plugins doivent essentiellement permettre à un développeur pour activer un nouveau webservice, en définissant le fournisseur, de manipulation de données (le cas échéant) et la façon dont les données seront présentées à l'utilisateur.
J'ai une vaste expérience en développement avec drupal qui a une puissante approche modulaire, mais qui suit aussi un non-conception orientée objet, donc je suppose que pour python, drupal, la conception peut ne pas être la solution optimale.
Si ce n'est de toute importance - l'âme sera nativement développé pour GNU/Linux.
Je vous remercie d'avance pour votre temps!
Vous devez vous connecter pour publier un commentaire.
Essayer de garder les choses faiblement couplés, et l'utilisation des interfaces généreusement pour aider.
J'aimerais commencer la conception avec le la Séparation des Préoccupations. Les principales couches architecturales sont:
Le domaine des classes de faire le travail, mais vous ne savez pas à propos de l'INTERFACE utilisateur. La couche de persistance connaît les classes du domaine, assez pour sauvegarder/charger en tant que de besoin. Le système d'interface de la couche d'abstraction de systèmes externes, ce qui vous permet de brancher un simulateur de derrière lors des tests. L'INTERFACE utilisateur devrait idéalement utiliser MVC, pour un maximum de flexibilité.
Sans trop mettre l'accent sur ce point, on ne serait pas normalement chercher à Drupal comme un exemple de bonne conception architecturale. Il a grandi organiquement, et il y a eu beaucoup de bouleversements de la conception, comme en témoigne le plugin régulière de casse lors de mises à niveau du système.
Je voudrais également écho à ce MicSim a déclaré, au sujet attentivement la conception de l'interface du plugin et de l'écriture de plusieurs différents plugins pour l'exercer. C'est la seule façon de vraiment faire ressortir les enjeux de la façon dont l'application et les plugins interagir.
Comme vous l'offrir certaines fonctionnalités de base de votre application, assurez-vous que le code de la partie qui doit être extensible/remplaçable déjà comme un plugin par vous-même. Alors vous allez obtenir un meilleur sentiment sur la façon dont votre API devrait ressembler.
Et de prouver que l'API est bonne, vous devriez écrire une deuxième et une troisième plugin, car alors vous découvrirez que vous avez fait beaucoup d'hypothèses lors de l'écriture de la première. Normalement les choses au clair, un peu après avoir fait cela, la 2e et la 3e étape.
Maintenant, vous pouvez écrire un plus plugin, parce que la dernière plugins que vous avez écrit ressembler le premier type, les données d'entrée et de présentation (peut-être encore un autre webservice météo). Choisissez quelque chose de totalement différent, avec absolument différentes données, et vous verrez que votre API encore trop adapté. (Sinon, vous avez fait un bon travail!)
Bien, probablement le premier endroit pour commencer est de s'asseoir et de comprendre ce que le plug-in pourriez avoir besoin pour remplir son but.
Vous voulez tenir compte de deux aspects principaux dans votre conception.
Et sans doute aussi, car cela ressemble à un projet d'apprentissage.
Je recommande aussi le développement de certains plugins de base lors de la conception de l'API. L'expérience d'avoir à utiliser ce qui vous design vous permettra de voir où une approche pourrait être de rendre les choses plus difficiles qu'elles ne devraient l'être.
Regarder dans le port d'écoute-abonné modèle. Tôt ou tard, votre application sera suffisamment complexe pour que vous avez besoin pour mettre en œuvre les rappels. Lorsque vous atteignez cette limite, l'utilisation de l'écoute, de l'abonné (il y a une mise en œuvre en wxPython).
Par exemple, plusieurs modules vous souhaitez regarder pour de nouvelles données à partir d'un certain nombre de flux. Des Modules en lien pourrait vouloir mettre à jour eux-mêmes, selon de nouvelles données.