Click here to load reader
View
221
Download
0
Embed Size (px)
Approche MVCModel-View-Controller
Taha ZerroukiTaha.zerrouki @ gmail.com
Universit de Bouira Dpartement InformatiqueMatser Gnie des systmes Informatiques
Mthodes et Technologies de limplmentation
Cours disonible sur http://infobouirauniv.wordpress.com
2
Dfinition
Larchitecture MVC (modle, vue et contrleur) est un concept trs puissant qui intervient dans la ralisation dune application.
Son principal intrt est la sparation : des donnes (modle), de laffichage (vue) et des actions (contrleur).
3
MVC
4
Exemple
On veut crer un carnet des contacts
Avec une fonctionnalit de recherche
5
Code en Python
# Cherche un num dans un tableau par son nomannuaire = [ {'prenom':'Ahmed', 'nom':'Mehdi', 'tel':'0778787887'}, {'prenom':'Mohamed', 'nom':'Rabehi','tel':'0778787887'}, ]def main(): # lire des donnes a partir du clavier print "Recherche d'un telephone" print "Introduire Un nom" nom = raw_input() # nombre d'elements trouvs nb_found = 0 # parcours des noms for personne in annuaire: # afficher toutes les personnes qui ont le nom donn if personne['nom'] == nom: print nom, personne['prenom'], personne['tel'] nb_found += 1 if not nb_found: print "ce nom %s n'existe pas "%nom
if __name__ == '__main__': main()
6
Code en Python
# Cherche un num dans un tableau par son nomannuaire = [ {'prenom':'Ahmed', 'nom':'Mehdi', 'tel':'0778787887'}, {'prenom':'Mohamed', 'nom':'Rabehi','tel':'0778787887'}, ]def main(): # lire des donnes a partir du clavier print "Recherche d'un telephone" print "Introduire Un nom" nom = raw_input() # nombre d'elements trouvs nb_found = 0 # parcours des noms for personne in annuaire: # afficher toutes les personnes qui ont le nom donn if personne['nom'] == nom: print nom, personne['prenom'], personne['tel'] nb_found += 1 if not nb_found: print "ce nom %s n'existe pas "%nom
if __name__ == '__main__': main()
Donnes
Interface
InterfaceTraitement
7
MVC
8
MVC
9
Avantages du MVC
Lapproche MVC apporte de rels avantages: Une conception claire et efficace grce la sparation des donnes de
la vue et du contrleur Un gain de temps de maintenance et dvolution du site Une plus grande souplesse pour organiser le dveloppement entre
diffrents dveloppeurs (indpendance des donnes, de laffichage (webdesign) et des actions)
10
Inconvnients
Linconvnient majeur du modle MVC nest visible que dans la ralisation de petits projets, de sites internet de faible envergure.
En effet, la sparation des diffrentes couches ncessite la cration de plus de fichiers: Un fichier pour le modle Un fichier pour le contrleur Un fichier pour la vue
Il nest donc pas trs intressant de recourir ce systme dans ce cas
11
MVC, comment a marche?
Larchitecture MVC est donc dcompose en trois tapes:
1. Le Modle
2. Le contrleur
3. La vue
12
1. Le Modle
Le modle correspond aux donnes,
la plupart du temps stockes dans une base de donnes.
Mais celles-ci peuvent galement tres contenues dans un fichier XML ou dans des fichiers texte.
Les donnes peuvent tre exploites sous forme de classes, dans un langage de programmation oriente objet (Java, Python, PHP5).
13
Exemple Modle
class model: """ classe de modele de donne""" def __init__(self): self.annuaire = [ {'prenom':'Ahmed', 'nom':'Mahdi', 'tel':'0778787887'}, {'prenom':'Mohamed', 'nom':'Mahdi','tel':'0778787887'}, ] def rechercher(self, nom): """ rechecher un tel par nom""" # La liste des personnes trouves return personnes
Donnes dans un tableau
14
Exemple Modle
class model_fichier: """ classe de modele de donne""" def __init__(self): self.annuaire = [] try: myfile = open("annuaire.txt") except: print "Can't open DataFile" sys.exit() lines = myfile.readlines() def rechercher(self, nom): """ rechecher un tel par nom""" . # La liste des personnes trouves return personnes
Donnes dans Fichier
15
3. La vue
la Vue correspond l'interface avec laquelle l'utilisateur interagit.
Les rsultats renvoys par le modle sont dnus de toute prsentation mais sont prsents par les vues.
Plusieurs vues peuvent afficher les informations d'un mme modle.
Elle peut tre conue en html, ou tout autre " langage " de prsentation.
La vue n'effectue aucun traitement, elle se contente d'afficher les rsultats des traitements effectus par le modle, et de permettre l'utilisateur d'interagir avec elles.
16
Example
class view: def __init__(self,): pass def input(self,): """ recuperer le nom rechercher""" print "Recherche d'un telephone" print "Introduire Un nom" nom = raw_input() return nom
def output(self, personnes): """ afficher les informations d'une liste des personnes""" print "La liste des noms trouvs" print " %d personnes trouves"%len(personnes) for pers in personnes: print pers['nom'], pers['prenom'], pers['tel']
17
Le Contrleur
Le contrleur est llment qui va utiliser les donnes pour les envoyer la vue.
18
Le Contrleur
Son rle est donc de rcuprer les informations, de les traiter en fonction des paramtres demands par la vue (par
lutilisateur, exemple: afficher les derniers articles), puis de renvoyer la vue les donnes afin dtre affiches.
19
Le Contrleur
Le contrleur peut donc : instancier diffrents objets (classe User, classe Articles, ) qui enverront des requtes vers la base de donnes ou rcupreront des
donnes XML.
20
Exemple
def controleur(): # lire des donnes a partir du clavier
data_model = model() affichage = view()
""" rechercher un nom """ # nom = affichage.input() personnes = data_model.rechercher(nom)
affichage.output(personnes)
21
Exemple Qutrub
Python / JAVA
Text/ SQLITE Android
Web (html)GUI ( QT)
22
Example
23
FrameWork MVC
24
MVC
25
Best 4 Top MVC Java-web-framework
https://zeroturnaround.com/rebellabs/top-4-java-web-frameworks-revealed-real-life-usage-data-of-spring-mvc-vaadin-gwt-and-jsf/
https://zeroturnaround.com/rebellabs/top-4-java-web-frameworks-revealed-real-life-usage-data-of-spring-mvc-vaadin-gwt-and-jsf/https://zeroturnaround.com/rebellabs/top-4-java-web-frameworks-revealed-real-life-usage-data-of-spring-mvc-vaadin-gwt-and-jsf/
26
PHP MVC frameworks
27
PHP MVC frameworks
28
Python MVC frameworks
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