web-dev-qa-db-fra.com

Comment créer des applications Web entièrement modulaires

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

Quelles sont les bonnes approches de l'architecture d'application lorsque vous créez une application à partir de zéro que vous souhaitez avoir un Core partagé entre tous les clients tout en conservant la flexibilité pour tout ce qui doit être modifié spécifiquement pour un client?

J'ai vu les crochets de CodeIgniter et je ne pense pas que ce soit une bonne solution car nous pourrions nous retrouver avec 250 crochets 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.

34
Webnet

Pour obtenir une modularité hautement organisée et découplée, vous pouvez suivre le modèle architectural MVC hiérarchique , parfois connu sous le nom de Présentation – abstraction-contrôle (bien qu'ils ne soient pas strictement le même modèle). Kohana , Alloy , Fluency and FuelPHP supporte HMVC nativement* et l'approche HMVC de Kohana est discutée dans Scaling Web Applications with HMVC and Optimizing HMVC Web Applications for Performance , by Sam de Freyssinet .

Malheureusement, CodeIgniter ne prend pas en charge HMVC nativement. J'ai construit mes propres bibliothèques pour fournir une sorte de support HMVC sur CodeIgniter, en m'inspirant de codeigniter-modular-extensions-hmvc de wiredesignz . Il y a un article très agréable introduction à HMVC sur nettus +, qui discute de CodeIgniter et de l'extension de wiredesignz. L'image et la citation suivantes proviennent de ce didacticiel:

enter image description here

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

Enfin, vous êtes sur la bonne voie avec les hooks, même si vous adoptez une architecture HMVC, il y aura des problèmes que vous devrez toujours résoudre avec des hooks, selon votre implémentation et le niveau d'automatisation que vous recherchez . Une bonne utilisation des crochets serait un pre_controller hook qui s'assurerait que toutes les dépendances des modules installés sont présentes, par exemple.

* Il peut y en avoir d'autres que je ne connais pas.

26
yannis

Je ne suis pas un gars PHP, mais du côté du script Java, si vous voulez avoir beaucoup de modules que vous souhaitez garder aussi indépendants que possible, il existe plusieurs systèmes pour cela, tels que RequireJS , qui ont des modules de script Java qui déclarent les dépendances sur d'autres modules, et le framework s'assure qu'ils sont chargés en cas de besoin.

Les différents cadres varient dans la façon dont les dépendances sont déclarées, dans quelle mesure la gestion des dépendances est effectuée en tant qu'étape de génération sur le serveur, lors du chargement de la page ou dynamiquement sur demande, et dans quelle mesure vous devez modifier la façon dont vous écrivez votre Java. scénario.

Ces cadres ne s'appliquent pas autant (ou peut-être pas du tout) si votre cadre 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 cadre 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 aux fonctions auto-appelées anonymes qui gèrent les dépendances en ordonnant d'abord les balises de script avec les dépendances et en se référençant mutuellement en s'enregistrant avec un seul objet dans l'espace de noms global. Cela les rend au moins presque modulaires et ne vous coûte pas cher à mettre en œuvre.

5
psr

Voici quelques instructions sur la façon de faire une conception modulaire: https://class.coursera.org/saas/lecture/preview/9

aussi ceci: " [[# #]] soa [~ # ~] peut être vu dans un continuum, à partir d'anciens concepts de l'informatique distribuée et programmation modulaire , via SOA, et sur les pratiques actuelles des mashups, SaaS , ... "

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

0
Goce Ribeski