Pattern MVC

a marqué ce sujet comme résolu.

Bonjour,

Je suis étudiant en info et j’essaie de pratiquer le pattern MVC et la programmation orientée objet, mais je bloque un peu sur comment utiliser le MVC.

Je fais un petit blog avec Bottle en Python.

J’ai créé trois classes, soit une pour le modèle, une pour la vue et une pour le controlleur.

Dans mon contrôleur j’instancie la classe Bottle pour l’application principale, je créer une instance du modèle et une instance de la vue.

Ensuite dans mon modèle je reçois l’application (l’instance de Bottle) depuis le contrôleur, je créer une route pour ma page d’accueil qui appelle l’instance de la vue dans le controlleur et enfin dans la vue j’ai une simple fonction qui retourne un template.

Là où j’hésite, c’est à savoir si ce que je fais au niveau de l’appel du template répond bien au pattern MVC.

Bon c’est vraiment très très basique encore comme code, mais je ne veux pas partir du mauvais pied.

On a fait pas mal de code en classe et je pensais tout bien comprendre, mais entre partir d’un code fourni par le prof pour bidouiller dedans en équipe et se débrouiller totalement seul de a à z, c’est pas la même chose. :P

Merci pour votre aide !

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
#!/usr/bin/env python
#-*-coding:utf8-*-

from bottle import Bottle, run, template

class Model():
    def __init__(self, parent):
        self.app   = parent.app
        self.home = self.app.route("/")(self.home)

    def home(self):
        self.parent.view.render_home()



class View():
    def __init__(self, parent):
        self.parent = parent

    def render_home(self):
        return template('home')



class Controller():
    def __init__(self):
        self.app   = Bottle()
        self.view  = View(self)
        self.model = Model(self)


    def runApp(self, host, port, debug):
        run(self.app, hostname=host, port=port, debug=debug)

if __name__ == "__main__": 
    c = Controller()
    c.runApp("localhost", "8080", True)

Salut,

Je vais prendre un exemple pour t’expliquer la structure MVC. Imaginons que tu veuilles afficher un message stocké en base de données. L’application reçoit une requête GET /messages/42/ et appelle la bonne méthode dans le bon controller, disons MessageController.get(). Cette méthode reçoit les données qu’il lui faut, entre autre l’ID du message à récupérer. Il demande au bon modèle le contenu de ce message, en appelant une méthode du genre MessageModel.get_by_id(42) et passe le résultat à la vue qui est chargé de générer le HTML qui va bien. Si le client demande du JSON en réponse, c’est au controller de gérer et d’appeler la vue qui va bien.

On a donc les modèles qui font l’abstraction des données. Remarque que le controller ne sait pas où sont stockés les données, elles peuvent être dans une base de données, dans une instance Redis, stocké dans des fichiers, une combinaison (instance Redis qui sert de cache devant une base de données par exemple), etc. Concrètement, c’est souvent une classe par type d’objet qu’on stocke (User, Notification, etc).

Les vues sont ce qui retournent la réponse. Elles peuvent générer pleins de formats différents, tout dépend tes besoins. Concrètement, ça peut être pleins de choses. C’est souvent une classe par type de données, genre HTMLView(template, data), JSONView(data), etc.

Enfin, le controller utilise les données de la requête ainsi que les modèles pour retourner la vue qui va bien (en lui passant ce dont elle a besoin, pour l’exemple au dessus ça serait le contenu du message).

Connectez-vous pour pouvoir poster un message.
Connexion

Pas encore membre ?

Créez un compte en une minute pour profiter pleinement de toutes les fonctionnalités de Zeste de Savoir. Ici, tout est gratuit et sans publicité.
Créer un compte