Question

Je cherche des pointeurs, des suggestions, des liens, des avertissements, des idées et même des comptes sur anecdotiques « comment concevoir une application de manière modulaire » . Je vais utiliser python pour ce projet, mais des conseils n'a pas besoin de se référer nécessairement à cette langue, bien que je ne suis prêt à mettre en œuvre une conception basée sur la POO.

Voici un contexte pour comprendre d'où je viens et ce que je suis en train de réaliser ...


Mon projet sera une petite application qui consomme des services Web et d'afficher les résultats de diverses façons, notamment:

  • pop-up de notification contenant uniquement le résultat de l'appel
  • onglet dans la fenêtre principale de l'application avec des graphiques tracée à partir des données brutes extraites-
  • tampon de messages (visibles sur Domand) où les résultats de divers services accumuleront des

L'application sera publié en tant que logiciel libre (comme en parole), et pour cette raison je voudrais rendre vraiment facile pour les autres développeurs d'écrire des plugins / modules qui prolongera la la fonctionnalité de l'application principale sans avoir besoin de modifier le code de base.

A ce moment, plugins doivent essentiellement permettre à un développeur d'activer un nouveau service web, en définissant le fournisseur, la manipulation de données (le cas échéant) et la façon dont les données seront présentées à l'utilisateur .

Je possède une grande expérience dans le développement avec qui a drupal une approche modulaire puissante, mais qui suit aussi un non-objet la conception à orientation, donc je pense que pour python, la conception pourrait ne pas être drupal la solution optimale.

Si cela est d'une importance -. Le noyau sera développé nativement pour GNU / Linux

Merci d'avance pour votre temps!

Était-ce utile?

La solution

Essayez de garder les choses à couplage lâche, et utiliser des interfaces généreusement pour aider.

Je commence la conception avec Séparation des préoccupations . Les principales couches architecturales sont:

  • Problème de domaine (aka moteur, back-end.): Les classes de domaine, qui font tout le travail réel, ont des connaissances de domaine mettre en œuvre le comportement de domaine
  • La persistance: la gestion du stockage pour les classes de domaine, base de données / couche de système de fichiers
  • Interface utilisateur: l'interface graphique, qui parle aux classes de domaine
  • Interfaces système: parler à d'autres systèmes, par exemple. la mise en réseau, les services Web

Les classes de domaine font le travail, mais ne savent pas sur l'interface utilisateur. La couche de persistance connaît les classes de domaine, assez pour enregistrer / charger au besoin. La couche d'interface système fait abstraction des systèmes externes, ce qui vous permet de brancher un simulateur derrière lors des tests. L'interface utilisateur devrait idéalement utiliser MVC, pour une flexibilité maximale.

Sans mettre trop insister là-dessus, on ne regarde pas habituellement à Drupal comme un exemple de bonne conception architecturale. Elle a connu une croissance organique plutôt, et il y a eu beaucoup de bouleversements de la conception, comme en témoigne la rupture du plug-in régulier sur les mises à niveau du système.

Je voudrais aussi écho à ce que dit MicSim, en ce qui concerne la conception soigneusement l'interface plug-in et d'écrire plusieurs plugins différents pour l'exercer. Ceci est la seule façon de chair vraiment les problèmes de la façon dont l'application et les plugins interagissent.

Autres conseils

Comme vous offrir quelques fonctionnalités de base avec votre application, assurez-vous que vous codez la partie qui devrait être extensible / remplaçable déjà comme un plug-in par vous-même. Ensuite, vous aurez mieux obtenir un sentiment sur la façon dont votre API devrait ressembler.

Et pour prouver que l'API est bonne, vous devriez écrire un deuxième et troisième plug-in, 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 cette étape 2e et 3e.

Maintenant, vous devriez écrire un autre plug-in, parce que les derniers plugins que vous écriviez ressemblent à la première dans le type, les données d'entrée et de présentation (peut-être encore une autre webservice météo). Choisissez quelque chose totalement différent, avec des données tout à fait différentes, et vous verrez votre API étant encore trop adaptée. (Sinon vous avez fait un bon travail!)

Eh bien, probablement le premier endroit pour commencer est de s'asseoir et comprendre ce que le plug-in pourrait avoir besoin pour remplir son objectif.

Vous voudriez considérer deux aspects principaux dans votre conception.

  • Comment vos demandes passe-cadre / recevoir des réponses du plug-in?
  • Quelles classes aide ou modules pourraient être bon de fournir?

Et sans doute aussi, car cela ressemble à un projet d'apprentissage.

  • Que voulez-vous écrire vous-même, et ce que vous êtes heureux juste de choisir d'une bibliothèque existante?

Je vous recommande également de développer des plug-ins de base que vous concevez l'API. L'expérience d'avoir à utiliser réellement ce que vous concevez vous permettra de voir où une approche donnée pourrait être rendre les choses plus difficiles qu'elles doivent être.

  • conception de l'api pour votre application, avec précaution ( Comment concevoir une bonne API et son importance )
  • tout faire, qui pourrait être utilisé indépendamment un module, groupe et construire de plus grandes pièces hors des parties simples (Kiss)
  • ne vous répétez pas (DRY)
  • écriture / publier des documents court souvent, pour vous-même et d'autres (mantra open source) ...

Regardez dans le modèle d'écoute-abonné. Tôt ou tard, votre application sera assez complexe que vous devez mettre en œuvre callbacks. Lorsque vous appuyez sur cette limite, utilisez-abonné auditeur (il y a une mise en œuvre wxPython).

Par exemple, plusieurs modules voudront surveiller les nouvelles données à partir d'un certain nombre de flux. Les modules qui relient entre eux pourraient vouloir se mettre à jour, en fonction des nouvelles données.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top