Question

Je crée une application Python et je souhaite l'implémenter en pensant à MVC.J'allais utiliser pubsub pour y parvenir mais je suis tombé sur PureMVC.

Quelqu'un pourrait-il m'expliquer ces deux choses, les différences entre elles et les implications de l'utilisation de l'une plutôt que de l'autre.

Était-ce utile?

La solution

Je suppose que vous faites référence à pypubsub que je connais beaucoup (j'en suis l'auteur ;).Cependant, je ne sais pas grand chose PureMVC pour Python.

Les deux sont très différents, d'après la documentation PureMVC.Voici quelques différences qui, à mon avis, seraient importantes dans le choix, en fonction de la navigation dans la documentation et de l'écoute de la présentation :

  • Courbe d'apprentissage:
    • Incorporer pypubsub dans votre application est simple :décidez des "sujets de message", abonnez-vous aux méthodes et fonctions, ajoutez des messages d'envoi pour ces sujets.Le transport des messages vers la destination est automatique.L'API "vitesse de croisière" est petite :tu as pub.subscribe et pub.sendMessage apprendre et c'est tout.
    • avec PureMVC, vous devez vous renseigner sur les médiateurs, les commandes, les proxys, etc.Ce sont tous des concepts puissants dotés de fonctionnalités importantes que vous devrez apprendre dès le départ.Vous devrez peut-être même écrire quelques applications avant de passer de la « connaissance » de leur objectif à la « compréhension » quand/comment les utiliser.Pour une application unique, les frais généraux en valent parfois la peine.Cela en vaut probablement la peine si vous créez de nombreuses applications qui utilisent le framework.
  • Impact sur la conception des applications :
    • PyPubsub :modèle de conception d’observateur anonyme.
    • PureMVC :Modèle architectural MVC.
    • Il n'y a aucune classe à utiliser avec pypubsub "utilisation standard".La plupart du temps, vous devez classer vos messages par sujets et décider quoi inclure comme données.Cela peut évoluer de manière assez organique :vous avez besoin d'une nouvelle boîte de dialogue et devez rendre une partie de son état disponible afin que lorsque vous modifiez un champ, une étiquette change ailleurs :tout ce que vous avez à faire est d'inclure une publication dans la boîte de dialogue et un abonnement dans le code qui met à jour l'étiquette.Au contraire, pypubsub vous permet de ne pas vous soucier du design ;ou plutôt, cela vous permet de concentrer votre conception sur la fonctionnalité plutôt que sur la façon d'obtenir des données d'un endroit à un autre.
    • Avec PureMVC, il existe de nombreuses classes à utiliser, elles nécessitent que vous conceviez vos composants pour en dériver, que vous les enregistriez et que vous implémentiez les fonctionnalités de la classe de base.Il n'est pas évident que vous puissiez facilement publier des données à partir d'un endroit dans votre application et les capturer dans un autre sans créer plusieurs nouvelles classes et les implémenter de manière à ce qu'elles fassent la bonne chose lorsqu'elles sont appelées par le framework.Bien entendu, les frais généraux (le temps de conception) en vaudront la peine dans certains cas.
  • Réutilisabilité :
    • Tant qu'un composant documente les sujets de message qu'il publie et ce qu'il écoute, il peut être incorporé dans une autre application, testé unitairement pour son comportement, etc.Si l'autre application n'utilise pas pypubsub, c'est facile à ajouter, il n'y a aucun impact sur l'architecture.Toutes les applications n'ont pas besoin d'utiliser pubsub, elles ne peuvent être utilisées que lorsque cela est nécessaire.
    • OTOH, un composant PureMVC ne peut être incorporé que dans une application déjà basée sur PureMVC.
  • Testabilité :
    • PureMVC facilite les tests en séparant les problèmes entre les couches :visuels, logique, données.
    • Alors que la publication-abonnement (pypubsub) le facilite en séparant les éditeurs des consommateurs, quelle que soit la couche.Ainsi tester avec pypubsub consiste à faire en sorte que le test publie les données utilisées par votre composant, et s'abonne aux données publiées par votre composant.Alors qu'avec PureMVC, le test devrait prétendre être des couches visuelles et de données.Je ne sais pas à quel point c'est facile dans PureMVC.
    • Tout système de publication-abonnement peut devenir difficile à déboguer sans les bons outils, une fois que l'application atteint une certaine taille :il peut être difficile de retracer le chemin des messages.Pypubsub fournit des classes qui aident à cela (à utiliser pendant le développement) et des fonctionnalités qui vérifient si les éditeurs et les auditeurs sont compatibles.
    • Il me semble, sur la base des diagrammes PureMVC, que des problèmes similaires se poseraient :vous devrez vous frayer un chemin à travers les proxys, les commandes et les médiateurs, via des façades, pour comprendre pourquoi quelque chose s'est mal passé.Je ne sais pas quels outils PureMVC fournit pour gérer cela.
  • But:
    • Le modèle d'observateur concerne la manière d'obtenir des données d'un endroit à un autre via une sorte de « bus de données » ;tant que les composants peuvent se connecter au bus, l'état peut être échangé sans connaissance de la source ou du récepteur.
    • PureMVC est un modèle architectural :son travail est de faciliter la description de votre application en termes de préoccupations de vue, de contrôle et de données.Le modèle ne se soucie pas de la façon dont le contrôle interagit avec lui ;le contrôle ne se soucie pas de la façon dont il est affiché ;mais la vue a besoin du contrôle pour fournir des services spécifiques pour gérer les actions de l'utilisateur et pour afficher le sous-ensemble de données souhaité (car généralement toutes les données disponibles ne sont pas affichées), et le contrôle a besoin du modèle pour fournir des services spécifiques (pour obtenir des données, modifier il, validez-le, enregistrez-le, etc.), et le contrôle doit instancier les composants de vue au bon moment.
  • Exclusion mutuelle:il n'y a aucune raison à laquelle je puisse penser, sur la base de la documentation, qui empêcherait les deux bibliothèques d'être utilisées dans la même application.Ils travaillent à différents niveaux, ont des objectifs différents et peuvent coexister.

Toutes les stratégies de découplage ont des avantages et des inconvénients, et il faut peser chacun.Courbe d'apprentissage, retour sur investissement, réutilisabilité, performances, testabilité, etc.

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