Question

Je construis un MVC où tout est un module. Cela me permettra de séparer les collections d'objets comme le forum et les modules utilisateur pour organiser davantage mon MVC.

/blog
    /controller
    /model
    /view
/user
    /controller
    /model
    /view
/forum
    /controller
    /model
    /view

Je cartographier actuellement les routes pour quelque chose comme forum/edit/34 à /forum/controller/edit.php qui contient le Forum_Controller_Edit classer. (Ceci est légèrement différent de l'approche standard où toutes les actions sont des méthodes d'un contrôleur Forum_Controller::edit()). Cela me permet de séparer toutes les «actions» individuelles d'un contrôleur dans leurs propres fichiers, donc je n'ai pas à gérer de grands contrôleurs avec 10 actions différentes.

Quoi qu'il en soit, voici le problème. Supposons que je souhaite ajouter de nouveaux contrôleurs à un module. Par exemple, disons que je veux avoir des sujets de forum (forum/topic/view/34). Je pourrais créer un nouveau module "Sujet".

/forum
    /controller
    /model
    /view
/topic
    /controller
    /model
    /view

Mais alors 1) je devrais utiliser l'URL comme /topic/view/ à la place de forum/topic/view, 2) J'aurais séparé les composants connexes (le sujet devrait faire partie du module Forum) et 3) Je ne serais plus en mesure de créer un module "Sujet" général pour quelque chose comme les nœuds de contenu si je le voulais.

Alors, comment puis-je construire un MVC modulaire tout en permettant à plusieurs contrôleurs (avec plusieurs actions) dans chaque module?

Framework kohana a décidé d'implémenter un HMVC pour résoudre ce problème. Cependant, cela se traduit par de nombreuses vérifications IS_File () pour trouver l'emplacement correct du fichier que vous souhaitez charger. Les vérifications d'E / S sont très précieuses sur le matériel de base, donc je ne considère pas cela comme une option. En outre, il n'est pas évident quelle version d'une classe est chargée, ce qui peut entraîner une confusion lorsque vous travaillez avec plusieurs classes avec le même nom.

Je voudrais trouver une solution à ce problème qui n'implique pas de chemins prédéfinis ou de vérification des dossiers pour la bonne classe. Pourtant, sur les 20 derniers cadres que j'ai regardés, ils ne semblent pas avoir une bonne réponse à ce problème universel. Quelqu'un a-t-il des idées?

Mise à jour du routage

Si je devais mettre en œuvre le routage, comment cela fonctionnerait-il? Comment gérer d'abord (/ forum), deuxième (/ forum / vue) et troisième niveaux (/ forum / thème / vue)? Comment mes itinéraires connaîtraient-ils la différence entre une route de troisième niveau et une route de deuxième niveau avec un paramètre? En d'autres termes, lequel de ces systèmes essaierait-il de faire? (Compte tenu de l'URI "Forum / Topic / View / 34")

$controller = new \Forum\Controller\Topic\View;
$controller->action('34');

// or
$controller = new \Forum\Controller\Topic;
$controller->view('34');

// or
$controller = new \Forum\Controller;
$controller->topic('view', '34')

Mise à jour du routage 2

Prise Conseils kyles J'ai décidé que Tous les contrôleurs aura besoin d'un ensemble d'itinéraires qui me permettra de définir les classes au-dessus du chemin d'URL "Forum / Topic / View / 34" Routes également. Après tout, chaque URL est importante et ne doit pas être basée sur la structure du système de fichiers que vous avez en place. Je crois qu'il a raison de dire que la conception de l'URL mérite plus d'attention que nous ne le donnons souvent.

Pas de solution correcte

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