2 votes

S'agit-il de logique métier ou de vues en MVC ?

Question de débutant sur les structures MVC. Donc dans un MVC, j'ai actuellement une page dans mes vues pour afficher une liste de résultats d'une requête de base de données, dans ce bout de code j'instancie une classe, j'exécute une méthode pour la requête sql, et enfin il y a une boucle for each et ensuite l'affichage avec des divs.

Ma question est donc la suivante : ce bout de code est-il considéré comme de la logique commerciale et doit-il se trouver dans une méthode du modèle, ou fait-il partie des vues ?

J'espère que vous comprenez ce que je veux dire =) Merci !

$listholder = new Categories_Model(); 
$data = $listholder->getCategories();

       $i = 1;
        foreach ($data as $row) {

            if ($i & 1) {
                echo '<div id="horizontalContainer" style="float: none; height: 50px";>';
                echo '<div id="listoverview1"><a href="'.URL.'categories/show/'.$row['id'].'">'.$row['catname'].'</a>';
                echo '</div>';
            } else {
                echo '<div id="listoverview1"><a href="'.URL.'categories/show/'.$row['id'].'">'.$row['catname'].'</a>';
                echo '</div></div>';
            }

            $i++;
       }

1voto

TFD Points 10618

Non, ce code est principalement un code de visualisation. Son seul but est de permettre à un processus externe (un humain) de voir les données sous une forme qui lui convient. En supposant que la vérification de la première ligne n'est importante que pour le processus externe, et non pour votre logique métier

Le code du modèle façonne, obtient et définit les données, dont certaines sont persistantes (base de données, etc.) et d'autres sont calculées à la demande.

Quelques exemples généralisés et simplifiés de ce que doit faire un modèle ou une vue :

  • Le modèle calcule le total de certains chiffres financiers
  • La vue signale chaque rangée paire afin qu'elle puisse être rendue avec un arrière-plan ombragé dans la vue.

De même, dans un système MVC classique, vos deux premières lignes de code se trouveraient dans le contrôleur, qui organiserait l'ensemble des données en utilisant des modèles et des méthodes de modèle pour obtenir des données. Le système MVC transmettrait ensuite ces données à la vue sélectionnée pour effectuer le rendu.

Il existe de nombreux frameworks MVC basés sur PHP, tels que CAKE, KISS, etc. Si vous avez quelques dollars en poche, économisez du temps et du stress et téléchargez Microsoft MVC.

0voto

hakre Points 102271

D'après votre question, il se peut que vous ayez une certaine compréhension de MVC qui n'a rien à voir avec ce que d'autres développeurs pensent de MVC. Cela peut arriver, surtout de nos jours où certains frameworks ont utilisé ces trois lettres comme une accroche sans les fournir réellement.

D'après le code que vous décrivez dans votre question, je dirais qu'il s'agit d'un cas typique de Transaction script et il n'y a aucun type spécifique de modèle ou de couche de vue impliqué.

La transaction script transporte la logique métier et vous n'avez pas besoin de spéculer beaucoup sur la vue ou les modèles, il suffit de garder tout à l'intérieur de la transaction script.

Votre transaction scripts aura tendance à devenir du code spaghetti, cependant, avec quelques petits refactorings ici et là au fil du temps, vous devriez être en mesure de réduire le code dupliqué et je ne pense pas que votre application deviendra si grande qu'il n'est effectivement plus faisable de la maintenir dans la transaction scripts.

Alors pourquoi se préoccuper de MVC si tout est en ordre avec un autre modèle bien éprouvé ?

0voto

Fire-Dragon-DoL Points 3290

En prenant comme exemple Rails ou CakePHP votre code ne suit pas le modèle mvc.

  • Le modèle ne doit contenir que la logique métier (interroger/faire quelque chose avec les champs d'un objet).
  • Le contrôleur doit fonctionner "uniquement" en recevant des demandes de pages web avec des paramètres et en renvoyant la page correcte.
  • La vue est essentiellement une page html seulement

Évidemment, il s'agit d'un bref exposé de ce qu'est le langage HTML.

Dans votre cas, l'idée serait :

$listholder = new Categories_Model(); 
$data = $listholder->getCategories();

Ce qui est un code de contrôleur (généralement), getCategories est une méthode de modèle (ok tel quel). Ensuite, le contrôleur va envoyer des paramètres à la vue qui saura comment les afficher à l'utilisateur, dans ce cas votre $data variable. Imaginez quelque chose comme printMyView($view_file_path, $data)

La vue sera quelque chose comme ceci : categories/show/">' ; catégories/affichage/">" ;

Voir http://php.net/manual/en/control-structures.alternative-syntax.php pour une syntaxe alternative de la structure de contrôle (assez agréable). Peut-être que les URLs sont mieux écrites avec sprintf ou des choses comme ça (pas comme je l'ai fait).

Fondamentalement, vous avez besoin de 3 fichiers (pour diviser les choses logiquement), et la loi est assez simple : n'écrivez jamais de html dans Controller, ni dans Model.

0voto

tereško Points 32847

L'objectif du modèle de conception MVC est de séparer la présentation de la logique commerciale du domaine. C'est pourquoi la logique métier reste exclusivement dans la couche modèle. (le modèle est une couche et non une classe unique, si vous avez une classe nommée Model vous le faites mal) L'ensemble de la couche de présentation contient des vues et des contrôleurs.

Les instances de contrôleur sont celles qui traitent les demandes de l'utilisateur et modifient l'état des instances de modèle et de vue.

Les instances de vue sont celles qui contiennent la logique de présentation (tout comme les objets de domaine contiennent la logique commerciale dans la couche modèle). Les vues acquièrent des informations à partir de la couche modèle et décident des modèles qui seront utilisés, ou même si un modèle est nécessaire. Les vues génèrent la réponse dans votre site web, et l'envoi de en-tête de redirection est également une forme de réponse, qui ne nécessite aucun modèle.

Vous devez également comprendre qu'il est impossible d'utiliser le modèle MVC classique avec PHP (et qu'il est très compliqué et peu pratique pour les rares développements web qui offrent cette option). A la place, vous utiliserez l'un des modèles inspirés du MVC.

Ces modèles se distinguent principalement par comment La vue * acquiert des informations à partir de la couche modèle. Les principales options sont : Model2 MVC, MVP, MVVM et HMVC.


Dans votre cas, la vue doit acquérir l'ensemble des catégories à partir de la couche modèle et ensuite, si la liste n'est pas vide et qu'aucune exception n'a été levée, sélectionner un modèle qui génère une liste HTML non triée.

La logique commerciale resterait dans la couche du modèle (dans l'objet de domaine, qui traite des catégories), la logique de présentation dans la vue et le processus de transformation de tout cela en HTML - dans le modèle, que la vue a choisi.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X