Comment créer des applications Web entièrement modulaires [fermé]

34

Dans les mois à venir, nous allons commencer un projet dans lequel nous prenons un système que nous avons construit pour un client (v1) et le reconstruisons à partir de zéro. Notre objectif avec v2 est de le rendre modulaire, afin que ce client spécifique utilise son propre ensemble de modules, puis qu'un autre client puisse utiliser un ensemble de modules totalement différent. L'astuce ici est que la société A peut avoir une série de modules de paiement et d'utilisateur qui changent le fonctionnement de ce système. La société B peut s’en tenir à la procédure de paiement standard, mais personnaliser le mode de navigation des produits.

Quelles sont les bonnes approches en matière d’architecture d’application lorsque vous créez une application à partir de zéro et que vous souhaitez que Corecelle-ci soit partagée entre tous les clients tout en conservant la flexibilité nécessaire à la modification de tout élément spécifiquement modifié pour un client?

J'ai vu les hameçons de CodeIgniter et je ne pense pas que ce soit une bonne solution car nous pourrions nous retrouver avec 250 hameçons et ce n'est toujours pas assez flexible. Quelles sont les autres solutions? Idéalement, nous n'aurons pas besoin de tracer une ligne dans le sable.

Webnet
la source

Réponses:

26

Pour obtenir une modularité hautement organisée et découplée, vous pouvez suivre le modèle architectural hiérarchique MVC , parfois appelé contrôle de présentation-abstraction-(bien que ces modèles ne soient pas strictement identiques). Kohana , Alloy , Fluency et FuelPHP prennent en charge HMVC en mode natif * et l’approche de Kohana en HMVC est décrite dans Mise à l’ échelle des applications Web avec HMVC et Optimisation des applications Web HMVC pour la performance , par Sam de Freyssinet .

Malheureusement, CodeIgniter ne supporte pas nativement HMVC. J'ai construit mes propres bibliothèques pour fournir une sorte de support HMVC sur CodeIgniter, en s'inspirant du codeigniter-modular-extensions-hmvc de wiredesignz . Vous trouverez une très belle introduction à l' article sur le HMVC sur nettus +, qui traite de l'extension de CodeIgniter et de wiredesignz. L'image et la citation suivantes proviennent de ce tutoriel:

entrez la description de l'image ici

Chaque triade fonctionne indépendamment l'un de l'autre. Un trio peut demander l'accès à un autre trio via ses contrôleurs. Ces deux points permettent à l'application d'être distribuée sur plusieurs emplacements, si nécessaire. De plus, la superposition de triades MVC permet un développement d'applications plus approfondi et robuste. Cela conduit à plusieurs avantages qui nous amènent à notre point suivant.

Enfin, vous êtes sur la bonne voie avec les hooks, même si vous adoptez une architecture HMVC, il vous restera quelques problèmes à résoudre avec les hooks, en fonction de votre implémentation et du niveau d'automatisation que vous recherchez. . Un bon usage des hooks serait un pre_controllerhook qui assurerait la présence de toutes les dépendances pour les modules installés, par exemple.

* Il y en a peut-être d'autres que je ne connais pas.

Yannis
la source
1
Est-ce qu'ASP.NET MVC prend en charge cela?
Robert Harvey
@RobertHarvey Je n'en ai aucune idée ...
yannis
@ Robert Harvey Pour moi, cela ressemble plus à un motif qu'à un cadre. Peut-être qu'il me manque quelque chose mais je ne vois pas pourquoi je ne peux pas le faire avec l'héritage dans ASP.NET MVC.
Jeremy
3
@ Jeremy: Cela devient délicat dans les vues, surtout si vous souhaitez réutiliser des parties de vues. Cela semble intriguant, mais j'ai du mal à visualiser au niveau des détails.
Robert Harvey
Dans le diagramme ci-dessus, il semble que les vues de niveau supérieur sont composées de vues plus petites situées plus bas dans la hiérarchie. Cela peut déjà être fait dans une certaine mesure avecRenderAction()
Robert Harvey
5

Je ne suis pas un gars de PHP, mais du côté des scripts java, si vous souhaitez conserver autant de modules que vous souhaitez garder aussi indépendants que possible, il existe plusieurs systèmes pour cela, tels que RequireJS , qui ont des scripts java. modules qui déclarent des dépendances sur d'autres modules, et la structure s'assure qu'ils sont chargés en cas de besoin.

Les différentes structures disponibles varient en fonction de la déclaration des dépendances, du nombre de manipulations de dépendance effectuées lors de la création du serveur, du chargement de la page ou du dynamisme à la demande, et de la modification de la manière dont vous écrivez votre code java. scénario.

Ces frameworks ne s'appliquent pas autant (ou peut-être même pas) si votre framework côté serveur gère cela ou génère votre script java pour vous, mais vous pouvez éventuellement souhaiter que votre script java soit indépendant de votre framework côté serveur.

Si vous n'avez pas trop de script java mais que vous voulez une certaine modularité, vous pouvez toujours vous en tenir à des fonctions d'appels anonymes qui gèrent les dépendances en ordonnant d'abord les balises de script avec des dépendances et en se référant les unes les autres en s'enregistrant avec un seul objet. l'espace de noms global. Cela les rend au moins presque modulaires et ne vous coûte pas beaucoup de mise en oeuvre.

psr
la source
0

Voici quelques instructions sur la conception modulaire: https://class.coursera.org/saas/lecture/preview/9

ceci aussi: "La SOA peut être vue dans un continuum, des concepts plus anciens d'informatique distribuée et de programmation modulaire , en passant par la SOA, aux pratiques actuelles de mashups, SaaS , ..."

L’organisation du code HMVC en soi ne conduit pas nécessairement à la modularité.

Goce Ribeski
la source