2008-10-07 4 views
5

En général, MVC frameeworks ont une structure qui ressemble à quelque chose comme:Sous une structure MVC, quelle structure de répertoire serait attendue par d'autres développeurs?

/models 
/views 
/controllers 
/utils 

Cependant, dans une suite d'applications Web, j'ai décidé que agglutiner tous les modèles, vues et contrôleurs ensemble ne serait probablement pas le meilleur Pour plus de clarté, à moins que je ne considère le système comme une application au lieu d'une suite d'applications. Cependant, certaines choses relient chaque "application", comme la notion d'utilisateurs et de rôles d'utilisateurs.

J'ai donc trois solutions possibles:

(1) Est-ce que ce que je ne veux pas vraiment faire, et de garder tous les modèles, vue et contrôleur ensemble, quelle que soit app il appartient. Ceci traite la suite comme une application unique, puisqu'ils sont liés par plusieurs threads communs, y compris les utilisateurs.

(2) Groupez le code par application. (3) Groupez le code par type, en laissant le code utilitaire partagé entre toutes les applications.

/models 
    /app1 
    /app2 
/views 
    /app1 
    /app2 
/controllers 
    /app1 
    /app2 
/utils 

Y at-il une option que j'ai ratée? Quel serait le schéma le plus logique pour les futurs développeurs? Personnellement, je préfère 2 et 3, mais peut-être la plupart des gens s'attendent à 1.

Répondre

5

Il semble que 2) serait votre meilleure option, en supposant que vous vouliez une séparation des applications. Vous pouvez également avoir un dossier "/ common" au niveau "/ app #" pour les ressources partagées dans toutes les applications ... comme une classe d'utilitaire partagée ou autre.

1

Si vos applications partagent des données, il serait logique (pour moi) de regrouper les modèles ensemble. Toutefois, pour les vues et les contrôleurs, il est probablement plus logique de les séparer, car je suppose qu'ils ont une logique métier et des présentations distinctes. En outre, si vos applications sont conservées séparément dans le contrôle de version (vous utilisez le contrôle de version, n'est-ce pas?), Cela rend la première ou la troisième option difficile à implémenter.

Donc, tout bien considéré, je vais probablement séparer les applications au plus haut niveau, comme dans votre deuxième exemple.

1

Je groupe habituellement du code par fonction, donc dans votre cas, le regroupement par application me semble le plus logique. La raison en est que si je veux travailler sur une fonctionnalité particulière, je ne devrais pas avoir à chercher dans trois dossiers distincts à la recherche des composants dont j'ai besoin. Si vous regroupez par la fonctionnalité de haut niveau, vous savez que tout ce dont vous avez besoin est ensemble.

6

2 est un bon début. Vous devriez envisager d'avoir un dossier commun dans lequel vous pouvez stocker tous les modèles, vues et utilitaires courants utilisés par toutes les applications de la suite d'applications.

/app1 
    /models 
    /views 
    /controllers 
    /utils 
/app2 
    /models 
    /views 
    /controllers 
    /utils 
/common 
    /models 
    /views 
    /utils 
+0

Cela ressemble vraiment à la solution la plus pratique. – CodeVirtuoso

Questions connexes