2009-01-13 7 views
1

J'ai un site web prototype écrit en PHP. Récemment, j'ai réécrit du code pour séparer la logique des opérations de mise en page et de base de données. Alors maintenant j'ai quelque chose comme la conception de code MVC.PHP 'quelque chose comme widget' conception du code

Maintenant, ce qui me dérange, c'est que dans MVC, je vais avoir beaucoup de fichiers et chacun affichera quelque chose lorsqu'il est combiné avec d'autres (modèle + vue + contrôleur). J'ai donc pensé qu'il serait utile de créer quelque chose comme des widgets de mes parties MVC. Par exemple, quand j'ai une vue MVC de produits que je créerais un fichier PHP qui combine des fichiers de pièces MVC de manière à afficher des produits basés sur des valeurs GET, je passe à ce nouveau fichier PHP. Ce que j'accomplirais de cette façon est que tous les widgets, sous-parties du site Web seraient disponibles pour voir séparément et utiliser séparément des autres parties. Donc, ce serait quelque chose comme des widgets ou comme la conception du navigateur Firefox.

Donc, je serais en mesure de tester chaque partie du site séparément, et que de combiner uniquement ces parties dans la conception actuelle de page de site Web. Les tests utilisateur seraient donc plus faciles et les fichiers de présentation seraient très courts et faciles à comprendre.

Je voudrais savoir ce que vous en pensez. Je ne veux pas tomber dans un trou dans le design-choses et je pense que c'est le moment qui sera important à l'avenir pour continuer à maintenir le code du site Web facile.

Ai-je raison?

+0

Une bonne petite vérification pour voir si vous utilisez MVC correctement, est d'appeler l'en-tête ("Lieu: www.google.com"); quelque part dans votre modèle ou votre contrôleur, si vous obtenez une erreur sur les en-têtes déjà envoyés, alors vous avez une sortie quelque part. –

Répondre

1

MVC Je vais avoir beaucoup de fichiers et chacun afficher quelque chose lorsqu'il est combiné avec d'autres (modèle + vue + contrôleur)

Cela sonne comme vous n'avez pas le droit modèle MVC. Seules les vues ont du contenu ou "affichent quelque chose". Sur cette base, vous pouvez créer des actions qui créent uniquement une petite partie de contenu semblable à un widget, qui peut ensuite être combinée dans votre mise en page.

Je voudrais vous recommander de lire le Zend_Layout Quick Start.

1

La réponse à votre problème est voir composition.

Je vous suggère de diviser tout l'écran en plus petits morceaux: barre supérieure, barre de navigation de deuxième niveau, liste de produits, zone de prévisualisation, etc. Ceux-ci peuvent être fournis par des vues séparées, des aides de vue ou des méthodes supplémentaires dans votre contrôleur. Ensuite, une action de contrôleur compose morceaux en un seul écran en utilisant une mise en page HTML simpliste.

Par exemple. pour la barre supérieure qui est statique, cela pourrait être une vue spécialisée. Pour la liste de produits dynamique, il peut s'agir de la méthode de contrôleur getProductsList($categoryId) qui fournit une vue complexe. Aperçu du produit peut être livré par l'aide de vue. Voir l'exemple suivant:

// inside class ProductsController 
public function index($categoryId, $productId = null) { 

    // specialised view 
    $topBar = new TopBarView(); 
    $topBar->selected = 'products'; 

    // helper method 
    $list = $this->getProductsList($categoryId); 

    // helper object 
    $previewHelper = new PreviewHelper($productId); 
    $preview = $previewHelper->getView(); 

    // view composition 
    $view = new View('path/to/template.tpl'); 
    $view->add($topBar); 
    $view->add($list); 
    $view->add($preview); 
    return $view; 

} 

Ceci est juste un exemple pour illustrer le fonctionnement de la composition.

L'avantage caché d'avoir une méthode pour fournir un widget (c'est-à-dire une liste de produits) est qu'il pourrait être réutilisé pour supporter Ajax. Changer de catégorie nécessiterait l'appel Ajax à la méthode getProductsList avec un nouvel identifiant de catégorie.

Questions connexes