Vous avez soulevé une question très intéressante et fondamentale. La question concernant l'architecture de projet à grande échelle et l'organisation de la structure des dossiers (qui est secondaire à l'architecture).
Aujourd'hui, l'approche la plus courante pour construire l'architecture du framework CMS est l'utilisation du modèle MVC. Il y a quelques bons articles sur la construction de vos propres frameworks MVC, l'un d'eux est Build an MVC Framework with PHP .
MVC signifie Model, View, Controller. Vous pouvez appeler ces approches comme bon vous semble - MVC, HMVC, MVP. L'essentiel est d'isoler les composants individuels de votre système. Le "Controller" récupère les données du "Model" et les envoie à "View", qui rend le HTML final. Vous avez déjà implémenté le "V" dans votre contacts.php
et "MC" dans votre contacts_class.php
. Vous avez donc isolé la vue du modèle et du contrôleur. Maintenant, vous pouvez facilement changer votre "Vue" en laissant les autres parties intactes.
Je ne vous suggère pas de suivre aveuglément le modèle MVC, MVP ou quoi que ce soit d'autre "MV". C'est une question de pertinence, d'efficacité et de goût.
L'application de site Web dynamique commune peut inclure des composants tels que:
- Le point d'entrée, disons
index.php
- Les bibliothèques / classes d'assistance
- Le routeur de requête
- Les modules, composants ou contrôleurs
- Le moteur de modèle ou peut-être des vues uniques
La véritable application Web peut inclure d'autres composants tels que des gestionnaires d'événements, des répartiteurs d'événements et des hooks, mais ce sont en fait des nuances. Eh bien, permettez-moi de le présenter comme je veux le présenter:
La routine d'opération de cadre commun comme suit:
- La demande du navigateur est envoyée directement à l'exécutable / script du point d'entrée (
index.php
).
- Le script du point d'entrée charge les bibliothèques d'assistance, les classes et effectue une initialisation supplémentaire de notre environnement de programmation.
- L'URL est transmise à l'instance de routeur de demande. Cette étape peut faire partie de l'étape 2.
- Le routeur de requête analyse l'URL et envoie l'opération à un composant, module ou contrôleur particulier.
- Le composant (ou contrôleur) traite la demande routée et envoie les données à la vue à restituer.
La structure de dossier de projet correspondante est illustrée dans le diagramme.
Je vous suggère d'étudier comment les autres cadres sont mis en œuvre. Les CMS / frameworks recommandés pour commencer sont CodeIgniter, OpenCart, Joomla 1.5 et Tango CMS.
Pour avoir une idée des questions à poser et des solutions disponibles, je recommande le livre Patterns of Enterprise Application Architecture de Martin Fowler. Vous pouvez vous faire une idée de ce qu'il y a dans le livre en lisant son site Web
Sachez que le livre est déjà assez ancien (en informatique) mais que de nombreux principes sont toujours valables ou vous devriez les apprendre à apprendre. (Cela avait-il du sens?)
(Logiciel) L'architecture est un sujet très large, ne vous attendez pas à une solution miracle mais toujours plus de questions et plus de doute jusqu'à ce que le temps et l'argent soient épuisés et que vous devez vous en tenir à la meilleure solution jusqu'à présent.
la source
Tout d'abord, jetez un œil à un projet bien développé. Wordpress est un exemple très soigné de structure de code: il est simple à comprendre mais offre beaucoup de "plug". Wordpress est donc facile à estimer via "plug in".
Deuxièmement, un moyen très simple de vérifier votre architecture consiste à écrire un test unitaire. Par exemple, si la classe "Card Deck" a une méthode "shuffle ()", vous devez pouvoir créer un Card Deck de taille prédéfinie (par exemple 5 cartes 1,2,3,4,5), appeler shuffle et vérifier dans un résultat facile (id 1,4,2,5,3)
Vous devez pouvoir le faire sans instancier l'intégralité des classes de projet, et le test doit être très propre à lire.
Si vous ne pouvez pas le faire, vous devez ajouter des couches entre les classes, les restructurer, jusqu'à ce que vous obteniez un moyen facile de le faire.
Répétez ensuite cette étape pour toutes les classes principales de votre projet.
Dernier point mais non des moindres: une bonne architecture pourrait être "paresseuse" sur des classes pas si essentielles (c'est une question d'économie: les choses très bien conçues coûtent trop cher dans le monde réel).
la source
MVC (Model View Controller) est une bonne architecture pour les projets à grande échelle: http://en.wikipedia.org/wiki/Model%E2%80%93view%E2%80%93controller
Cependant, la question de savoir si d'autres programmeurs le comprendraient est tout à fait différente. MVC peut devenir complexe et est parfois exagéré pour les petits projets. L'un de ses avantages est qu'il évolue facilement.
la source
Si je comprends bien votre question, vous parlez de la structure du dossier du projet et non essentiellement d'une architecture. Si ma compréhension est correcte, lisez la suite; sinon modifiez votre question ou mettez un commentaire et je modifierai ma réponse en conséquence.
Lors de la conception d'une application, après avoir répondu à certaines questions de base telles que (quoi? Et à qui?), Nous devons identifier les composants et les classer en fonction de la fonctionnalité \ des responsabilités. Il y a deux façons principales que je connais. Vous pouvez classer les composants en fonction de, utiliser les cas qu'ils gèrent (comme la connexion, la recherche, etc.) ou classer en fonction des ressources (objets ..). La première méthode est appelée orientée vers l'activité et la seconde est appelée orientée vers les ressources. Traditionnellement, la plupart des applications classent les composants en fonction des activités (car les concepteurs l'ont trouvé, facile lors du transfert d'un domaine problématique vers un domaine de solution) .Mais je m'égare.
Une fois que la classification des composants est identifiée, nous devons identifier la classification basée sur les niveaux. Une application Web typique aura un niveau de vue, un niveau de modèle et un niveau de contrôleur (MVC). Bien sûr, il pourrait aussi y avoir des applications plus complexes. (la plupart des applications du monde réel sont plus complexes que cela est simple).
Après avoir identifié ces deux taxonomies, je vais créer des dossiers de premier niveau identifiant chaque niveau. (UI, Controller, Services, Utils, etc.). Sous chaque dossier de haut niveau, je vais créer des dossiers enfants basés sur la fonctionnalité ou les ressources (Project - / EditProject - / SearchProject etc.). Idéalement, la classification fonctionnelle sera à plusieurs niveaux.
la source
Il y a de bonnes architectures et de mauvaises architectures, mais il n'y a pas de balles d'argent. Une architecture doit être adaptée aux exigences actuelles et futures possibles.
Une bonne ligne directrice serait de vous assurer que chaque partie de l'application pourrait être modifiée avec un effet minimal sur les autres parties et que chaque partie a des tests unitaires et d'intégration de couverture complète automatisés.
la source
L'architecture consiste à s'assurer que vous pouvez continuer à vous développer à long terme. Pour les applications plus importantes, cela implique de faire des compromis entre rendre les choses indépendantes afin que plusieurs personnes puissent travailler simultanément et éviter la duplication (DRY) afin que le projet puisse rester agile. Les projets PHP ont tendance à se concentrer sur le fait de rendre les choses indépendantes et ont une grande quantité de duplication.
Pour avoir une bonne idée de l'autre position extrême, jetez un œil à Seaside
la source
Si vous ne savez pas comment structurer un grand projet, vous devez emprunter la conception / l'architecture des autres en utilisant l'un des nombreux bons cadres PHP. Je recommanderais CakePHP, CodeIgniter ou Symfony. Tous ces implémentent un modèle, vue, contrôleur, patten MVC qui fonctionne bien dans le développement Web, ils sont tous assez légers et faciles à apprendre.
Une fois que vous aurez appris à connaître l'un de ces cadres, vous serez peut-être en mesure de concevoir votre propre structure pour votre projet particulier, mais si vous débutez, je me tiendrais sur le travail des autres par rapport à la réinvention de la roue.
la source
MVC est l'architecture la plus utilisée, qui s'est révélée résoudre la plupart des problèmes. Une bonne architecture aura les caractéristiques suivantes (et plus, ou bien sûr)
la source
avant d'écrire un code de production, prenez 2 semaines (nuits :) et lisez ce livre. Cela changera longtemps d'avis sur l'architecture de programmation, les pratiques et le packiging.
Principes, modèles et pratiques agiles C # par Prentice Hall
Les exemples sont en C # mais ils sont faciles à lire, il ne s'agit pas d'écrire la syntaxe de code correcte, mais de penser en tant que programmeur.
Je vous promets de le sauvegarder sur votre emplacement le plus accessible sur votre PC et vous serez étonné que vous ayez programmé sans le savoir. Cela changera votre façon de penser.
la source