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