SLAM5 Design pattern MVC et application en langage à objet C#

Transcription

SLAM5 Design pattern MVC et application en langage à objet C#
SLAM5
1.
Design pattern MVC et application en langage à objet C#
Cours
Le design pattern MVC
1.1 Design pattern ou patron de conception ?
Un patron de conception décrit les grandes lignes d'une solution, les procédés de conception généraux
d'un logiciel. Ils permettent de capitaliser l'expérience appliquée à la conception de logiciel. Ils peuvent
être modifiées et adaptées en fonction des besoins.
Le patron de conception propose une manière de faire.
L'architecture MVC est un patron de conception adapté aux applications web écrites avec des langages
objet. Mais on peut aussi écrire une appli MVC sans qu'elle soit pour autant déployée sur le web.
1.2 Que signifie MVC ?
Le MVC (Model View Controller) permet d'organiser le code de l'application en trois parties :
• modèle
• vue
Chacun joue un rôle précis dans la gestion et la mise en
• contrôleur
œuvre de l'application.
1.3 Qui fait quoi ?
L'idée est de séparer les couches de développement :
Interface - IHM
couche de présentation
= vue
(UI : User Interface),
Traitements
couche interaction Vue/Modèle
= contrôleur (BLL : Business Logic Layer)
Connexion, requêtes couche d'accès et de gestion des données = modèle
(DAL : Data Access Layer)
•
La vue est chargée de la présentation de l'IHM, avant et après chargement des données : menus,
formulaires et affichages des résultats. Elle correspond à ce que l'utilisateur voit de l'application.
•
Le modèle est chargé de la gestion des données : connexion et interface avec la base de données,
requêtes SQL, lecture, écriture, ajout, suppression, mise à jour des données dans les tables de la base.
•
Le contrôleur a en charge la gestion des événements : synchronisation vue/modèle. Il gère les
'interactions Vue/Modèle, reçoit et traite tous les événements déclenchés par l'utilisateur (clic,
sélection...), sollicite les données gérées par le modèle, provoque l'affichage des résultats par les vues.
Ce que voit l'utilisateur
Les IHM
Chaine de connexion
Accès aux données de la base.
Requêtes SQL : ajout, consultation, update ...
Actions
Chargement des données
Gestion des évènements
Lien entre Vue et Model
1.4 Intérêt, avantages :
•
•
•
structuration de l'application, on sait où chercher,
amélioration de la lisibilité du code,
flexibilité et maintenance améliorées.
Cette architecture permet de séparer les différentes entités d'une application, aboutissant à une
architecture flexible, claire et maintenable.
Carcouët BTS SIO2 2014 - 2015
MVH
1/4
SLAM5
2.
Design pattern MVC et application en langage à objet C#
Cours
Le contrôleur
On peut distinguer deux contrôleurs :
•
Le contrôleur appelé dans la barre d'adresse au lancement de la page web ou encore le program.cs
lancé automatiquement lors de l'exécution d'une application C. Ce contrôleur est appelé "front
controller" ou "dispatcher". Il ne fait pas grand chose, hormis lancer l'exécution de l'application. il
sollicite immédiatement un autre contrôleur plus complexe.
Extrait du programme de lancement de l'application C#
namespace catoesSoignerEspeces
// Détail du programme C# program.cs
{
static class Program
{
[STAThread]
static void Main()
{
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
Application.Run(new frmSommaire()); // Lancement application et affichage du sommaire
} } }
•
le contrôleur d'arrière plan ou "back controller" qui, fait tout le travail ! Il réagit aux actions
demandées par l'utilisateur et appelle les opérations de gestion ou d'accès aux données nécessaires
pour répondre à la demande de l'utilisateur.
Extrait du contrôleur de gestion des espèces du parc animalier "Catoes"
public void afficheEcran(String[] mess, String vue)
{
switch (vue)
{
case "AjouterEspece": frmEspeceAjouter fEspeceAjouter = new frmEspeceAjouter();
fEspeceAjouter.Show(); ..... // Appel d'une vue
case "ValidationAjoutEspece": laGestion.AjouterUneEspece(mess);
// Appel d'un "model" qui permet d'ajouter une espèce à la table ESPECE de la base
case "ModifierEspece": String[,] listeEspeceChoix = laGestion.ListeDeToutesLesEspeces();
// Appel d'une fonction qui renvoie la liste de toutes les espèces sous forme d'un tableau
case "ValidationChoixEspece": ....
case "ValidationModificationEspece": ....
case "ConsulterToutesLesEspeces": ....
Que contient le "back controller" ? :
•
•
•
•
l'appel de la vue - IHM - correspondant à l'action que veut conduire l'utilisateur,
l'appel des modules de gestion des données,
les appels de fonctions spécifiques,
les vérifications d'ordre général (comme les autorisations).
Carcouët BTS SIO2 2014 - 2015
MVH
2/4
SLAM5
3.
Design pattern MVC et application en langage à objet C#
Cours
Le modèle
Le modèle est constitué de plusieurs fichiers assez complexes qui ont en charge la manipulation des
données de la base. Ces fichiers contiennent des fonctions ou des procédures de gestion de données :
•
•
•
déclaration de la chaine de connexion,
requêtes SQL de recherche, consultation, mise à jour, ajout, suppression de données,
chargement dans des tableaux de listes d'enregistrements, curseurs, provenant des tables de la base.
Chacune de ces procédures effectue une action.
Le modèle a pour but de gérer l'organisation des données et d'exécuter des requêtes SQL qui ne peuvent
être effectuées que dans ces procédures ! C'est dans le modèle que l'on trouve les appels à la base de
données et les méthodes de chargement (lecture), de recherche, d'ajout, de suppression, ...
Extrait d'un des fichiers "model" permettant l'ajout d'un Soignant à la table SOIGNANT
class accesBD {
SqlConnection maConnexion;
public accesBD(string nomBase, string nomServeur)
{
// Constructeur
string connectString = "database=" + nomBase + "; server=" + nomServeur + ";
maConnexion
= new SqlConnection(connectString);
}
//- Ajouter un soignant
public void ajouterUnSoignant(int leCode, string leNom, string lePrenom, string leTel)
{
maConnexion.Open();
string maRequete = "insert into SOIGNANT values ("+ leCode +",'"+ leNom +"','"+ lePrenom + ...);
SqlCommand maCommande = new SqlCommand(maRequete, maConnexion);
maCommande.ExecuteNonQuery();
maConnexion.Close();
}
4.
La vue
L'objectif est de séparer l'affichage des données de l'IHM
attendue par le client et la logique d'accès et de gestion des
données.
==> La vue contient uniquement les directives d'affichage des
données sur évènement déclenché par l'utilisateur.
Ce que nous avions déjà pour habitude de faire : il n'y a aucun
composant paramétré dans l'interface, tout est fait par le code.
public partial class frmTousLesSoignants : Form
{
public frmTousLesSoignants(string[,] leMess) //Param. d'entrée le tableau des soignants
{
InitializeComponent();
for (int i = 0; i <= Convert.ToInt32(leMess[0, 4])-1; i++)
{
this.dgvTousLesSoignants.Rows.Add(leMess[i, 0],leMess[i, 1],leMess[i, 2],...);
}
}
private void btnFermer_Click(object sender, EventArgs e)
{
this.Close();
Carcouët
BTS SIO2 2014 - 2015
MVH
3/4
}
}
SLAM5
5.
Design pattern MVC et application en langage à objet C#
Cours
Comment est traitée une demande client avec MVC ?
Le traitement d'une demande d'un client se déroule en 5 étapes :
1. Le client fait une demande au contrôleur :
• soit il sélectionne une action proposée par le menu,
• soit il déclenche un évènement en cliquant sur un bouton de commande.
Le contrôleur est la porte d'entrée de l'application. C'est le C de MVC.
2. Le contrôleur traite la demande. Il peut avoir besoin de l'aide de la couche métier (les classes de
l'application), qui sont elles-mêmes interfacées aux données de la base via le connecteur DAO, la
chaine de connexion. La couche métier c'est ce qu'on appelle le modèle, M dans la structure MVC.
3. Le contrôleur reçoit une réponse de la couche métier. La demande du client a été traitée par la
couche métier qui peut avoir retourné plusieurs réponses possibles :
• Une page de confirmation si la demande est correctement traitée : Try - retour sans erreur
• Une page d'erreur si la demande n'a pu être traitée correctement : Catch - traitement erreur
4. Le contrôleur choisit la vue, formulaire, à envoyer au client en fonction du résultat du traitement de
la demande client. Celle-ci est le plus souvent une IHM contenant des éléments dynamiques. Le
contrôleur fournit ces éléments à la vue et enrichit les composants type comboBox ou dataGridView.
5. La vue est envoyée au client. C'est le V de MVC.
Ce type d'architecture est souvent appelée "architecture 3-tiers" ou à 3 niveaux ou en couches.
6.
Organiser l'espace de stockage d'une application MVC ?
Le patron d'architecture MVC impose la séparation entre :
• la gestion des données,
• la présentation des formulaires - IHM
• et les traitements.
Notre solution Visual Studio comportera donc trois sous-dossiers
fondamentaux, voire quatre avec la description des classes utiles à
l'application.
Cette séparation facilite la maintenance ultérieure de l'application.
Lorsqu'on utilise l'architecture MVC cela se passe en 4 étapes :
•
•
Créer les classes d'objets et les conteneurs (listes d'objets)
Créer les modèles :
‐
fichier d'accès aux données de la base
‐
gestionnaire d'actions vers la base
• Créer les vues
• Interfacer vues et fichiers modèles via le contrôleur
Carcouët BTS SIO2 2014 - 2015
MVH
4/4