La présentation est en train de télécharger. S'il vous plaît, attendez

La présentation est en train de télécharger. S'il vous plaît, attendez

Designs Patterns comment rendre son code faiblement couplé, et maintenable...

Présentations similaires


Présentation au sujet: "Designs Patterns comment rendre son code faiblement couplé, et maintenable..."— Transcription de la présentation:

1 Designs Patterns comment rendre son code faiblement couplé, et maintenable...

2 Pourquoi réinventer la roue, alors que nos douleurs quotidiennes ont été étudiées par dautres avant nous ? Par masochisme ? Par sadisme ? Constat : Hormis les algorithmes métier, les difficultés de lingénierie de code sont souvent identiques ! Les solutions mises en œuvres sont (trop) souvent dépendante de limagination du développeur… Une solution : Les Designs Patterns ! Ce sont un ensemble de recettes permettant de résoudre les principaux problèmes liés à lingénierie de code, Objectif : Garder un code ouvert au changement, mais fermé aux modifications,

3 Fondements des DP GOF (Gang of four) Nest pas le groupe de musique post-punk des années 70… Mais plutôt les 4 créateurs à lorigine des DP ! « Chaque patron décrit un problème qui se manifeste constamment dans notre environnement, et donc décrit le cœur de la solution à ce problème, dune façon telle que lon puisse réutiliser cette solution des millions de fois, sans jamais le faire deux fois de la même manière » 23 patterns de « base » Quel que soit le langage, ou la technologie objet ! Tous les autres sont des dérivés... (MVVM,...)

4 3 Types Création (Creational Patterns) Singleton, Factory, Abstract Factory, Prototype Structural (Structural Patterns) Adapter, Facade, Proxy,... Comportements (Behavioral Patterns) Strategy, Chain of responsability, Iterator, Observer,...

5 Formalisme

6 Entrons dans le vif du sujet

7 Le pattern Ss s s s s s s s

8 Etape 3 Lannée suivante, le client désire ajouter une évolution : les canards savent voler... Nom : Ss s s s s s s s Type : Comportement But : Encapsuler les comportements susceptible de changer, afin de les rendre interchangeables. Exercice : Etape 1 Un client désire une FPS de canards... Un canard a un nom, peut nager, cancaner et doit être affiché. Etape 2 Lors de la release de la version, le client note que tout les canards nagent et cancanent de la même manière... cest MAL !. Bug ! les canards en plastique qui étaient dans lapplication (des leurres en quelque sorte) se mettent à voler... Nous avons donc un problème de conception ! Quelles solutions daprès vous pourraient apporter implémentation pérenne, en dautres termes : Disposer dune application fermée aux modifications mais ouverte aux changements ?

9 Héritage ? Interfaces ? Reprenons de la hauteur ! Quel est le réel problème ? Que proposez vous comme solutions ? LE CHANGEMENT ! Nom : Ss s s s s s s s Type : Comportement But : Encapsuler les comportements susceptible de changer, afin de les rendre interchangeables.

10 LA VRAIE question porte donc sur ce qui change : Quels sont les différences entre les différents canards ? réponse : leur comportement... (vol, cancan, affichage) LA VRAIE question porte donc sur ce qui change : Quels sont les différences entre les différents canards ? réponse : leur comportement... (vol, cancan, affichage) Nom : Ss s s s s s s s Type : Comportement But : Encapsuler les comportements susceptible de changer, afin de les rendre interchangeables.

11 Nom : Stratégie (Strategy) Type : Comportement But : Encapsuler les comportements susceptible de changer, afin de les rendre interchangeables. Cancan etc.

12 Nom : Stratégie (Strategy) Type : Comportement But : Encapsuler les comportements susceptible de changer, afin de les rendre interchangeables. Exemple de stratégie

13 Nom : Stratégie (Strategy) Type : Comportement But : Encapsuler les comportements susceptible de changer, afin de les rendre interchangeables. Exemple de Contexte

14 Nom : Stratégie (Strategy) Type : Comportement But : Encapsuler les comportements susceptible de changer, afin de les rendre interchangeables. Exemples réels : Une application de paiement en ligne peut offrir différents moyens de paiements, il suffit de choisit la bonne stratégie en fonction du choix du client. Car hormis le mode de paiement, la suite du flux de commande demeure identique... En.net, la classe ArrayList (contexte) est une bon exemple. La méthode sort par défaut offre une implémentation (stratégie concrète) par défaut. Cette méthode peut être substituée par limplémentation fournie à lexécution (implémentation de linterface IComparer - stratégie)...

15 Privilégier le couplage faible favorise lévolution... I l e s t p r é f é r a b l e d i m p l é m e n t e r d e s i n t e r f a c e s ! Retour sur les brèves de comptoir... Lhéritage est un concept qui sapplique au modèle métier (le plus souvent). Encapsuler ce qui change est un gage dévolution ! Un code doit être ouvert au changement, mais fermé aux modifications... La composition est préférable à lhéritage ! Nom : Stratégie (Strategy) Type : Comportement But : Encapsuler les comportements susceptible de changer, afin de les rendre interchangeables.

16 Le pattern Aa a a a a a

17 Nom : Aaa a a a a Type : Structural But : Permettre à deux instances de classes d'interagir entre elles, sans modification de structure. Reprenons notre SuperCanard... Un jour, notre client favoris rachète un produit concurrent : Super Dindes. Il vient nous voir, car il désire créer une édition spéciale : Dindes VS Canards

18 Nom : Aaa a a a a Type : Structural But : Permettre à deux instances de classes d'interagir entre elles, sans modification de structure. Reprenons notre précédent projet... Quelle était le sujet de Super Canards ? Quelles étaient les contraintes ? Quelle solution(s) avons nous apporté ? ? ?

19 Nom : Aaa a a a a Type : Structural But : Permettre à deux instances de classes d'interagir entre elles, sans modification de structure. Petit rappel... La classe Duck, et les strategies de comportement...

20 Petit rappel... La classe Duck, et les strategies de comportement...

21 Privilégier le couplage faible favorise lévolution... Nom : Aaa a a a a Type : Structural But : Permettre à deux instances de classes d'interagir entre elles, sans modification de structure. I l e s t p r é f é r a b l e d i m p l é m e n t e r d e s i n t e r f a c e s ! Retour sur les brèves de comptoir... Lhéritage est un concept qui sapplique au modèle métier (le plus souvent). Encapsuler ce qui change est un gage dévolution ! Un code doit être ouvert au changement, mais fermé aux modifications... La composition est préférable à lhéritage !

22 Nom : Aaa a a a a Type : Structural But : Permettre à deux instances de classes d'interagir entre elles, sans modification de structure. Quelles solutions pourraient apporter une solution simple, rapide... et maintenable ? VS

23 Cela jacasse dur autour de ce concept ! Mais en termes dimplémentation cela donne quoi ? Cela jacasse dur autour de ce concept ! Mais en termes dimplémentation cela donne quoi ?

24 Nom : Adaptateur (Adapter) Type : Structural But : Permettre à deux instances de classes d'interagir entre elles, sans modification de structure. IHM gérant exclusivement des canards... Interface de canards... Adaptateur canards-dinde Dinde

25 Nom : Aaa a a a a Type : Structural But : Permettre à deux instances de classes d'interagir entre elles, sans modification de structure. Revenons à nos mouton... ou plutot à nos canards, et dindes... En sachant ce que vous savez, quelle serait lapplication du pattern Adapter ?

26 Nom : Adaptateur (Adapter) Type : Structural But : Permettre à deux instances de classes d'interagir entre elles, sans modification de structure. Solution = 3 adaptateurs : - Adaptateur de comportement de nage, - Adaptateur de comportement Quack, - Adaptateur permettant de transformer une dinde en canard

27 Nom : Adaptateur (Adapter) Type : Structural But : Permettre à deux instances de classes d'interagir entre elles, sans modification de structure. Il est donc nécessaire dadapter notre dinde aux concepts manipulés... (comportements) (ceci est nécessaire pour adapter la dinde à limplémentation existante) Adaptateur pour passer dun comportement lié à la classe au pattern stratégie Interface Dinde - Duck différente... A linitialisation, fournir à ladaptateur lobjet adapté !

28 Nom : Adaptateur (Adapter) Type : Structural But : Permettre à deux instances de classes d'interagir entre elles, sans modification de structure. Il est donc nécessaire dadapter notre dinde aux concepts manipulés... (duck) (ceci est nécessaire pour adapter la dinde à limplémentation existante)

29 Nom : Adaptateur (Adapter) Type : Structural But : Permettre à deux instances de classes d'interagir entre elles, sans modification de structure. Utilisation Attention : un canard peut masquer une dinde...

30 Nom : Adaptateur (Adapter) Type : Structural But : Permettre à deux instances de classes d'interagir entre elles, sans modification de structure. Un oeil dans le code ? une démo ?

31 Nom : Adaptateur (Adapter) Type : Structural But : Permettre à deux instances de classes d'interagir entre elles, sans modification de structure.... et dans la vraie vie... le concret du réel... pouvez vous me donner des exemples de cette implémentation...? Adaptateur.net - COM, Adaptateur entre dll third party et main app, Fonctionnement des add ons, Hors informatique ? des adaptateurs de prise UK - FR, les réducteurs de wc pour enfants, les réducteur pour dock dipod etc.

32 Privilégier le couplage faible favorise lévolution... Nom : Adaptateur (Adapter) Type : Structural But : Permettre à deux instances de classes d'interagir entre elles, sans modification de structure. I l e s t p r é f é r a b l e d i m p l é m e n t e r d e s i n t e r f a c e s ! Retour sur les brèves de comptoir... Lhéritage est un concept qui sapplique au modèle métier (le plus souvent). Encapsuler ce qui change est un gage dévolution ! Un code doit être ouvert au changement, mais fermé aux modifications... La composition est préférable à lhéritage ! Ce nest ni à la classe métier, ni au contexte à devoir sadapter...

33 Le pattern e e e e e e e e

34 Nom : Eeeeeeee Type : Creational But : Centraliser linstanciation dobjets. Et où est le problème ? Techniquement, nulle part... mais en ce qui concerne la gestion du changement il sagit dune autre affaire ! Techniquement, nulle part... mais en ce qui concerne la gestion du changement il sagit dune autre affaire ! Jusque là, pour instancier des objets nous placions des new là où nous en avions besoin...

35 Nom : Eeeeeeee Type : Creational But : Centraliser linstanciation dobjets. En implémentant des interfaces, nous isolons le code des changements qui peuvent se produire en aval. En sappuyant sur une interface, le code client continuera de fonctionner lors du remplacement dune classe, et ce par polymorphisme. Le couplage est donc faible.

36 Nom : Eeeeeeee Type : Creational But : Centraliser linstanciation dobjets. En codant nos classes sans interface, il est nécessaire de « réouvrir » le code aux modifications pour prendre en compte à chaque changement de classe.

37 Comment éviter le coté obscure ? Identifier ce qui change et Lexternaliser ! souvenez vous des patterns stratégie et adapteur... PS : Cette règle vaut pour tous les patterns...

38 Nom : Eeeeeeee Type : Creational But : Centraliser linstanciation dobjets. Bonjour Messieurs, Jai lhonneur de vous annoncer que vous avez été sélectionnés pour la réalisation de notre application de gestion de pizzérias. Félicitations ! Luigi Del Gusto

39 Nom : Eeeeeeee Type : Creational But : Centraliser linstanciation dobjets. En tant pour bon concepteur, comment aller vous mettre en oeuvre cette application de pizza ?

40 Nom : Eeeeeeee Type : Creational But : Centraliser linstanciation dobjets. Pour fêter les transhumances, Luigi désire ajouter à la carte des spécialités régionnales : - pizza raclette, - pizza reblochonne, - pizza au gorgonzola Jen ai leau à la bouche ! Evolution :

41 Nom : Eeeeeeee Type : Creational But : Centraliser linstanciation dobjets. Luigi revient nous voir, il a monté des pizzerias dans les quatre coin de France et Navarre. Il désire maintenant sexporter... Or les pizza allemande portent le même nom que les françaises, seul la composition peut varier... Le processus de fonctionnement des pizzerias demeure le même... Scoop : Une nouvelle évolution pointe le bout de son nez :

42 Nom : Eeeeeeee Type : Creational But : Centraliser linstanciation dobjets. Quallez vous mettre en place pour permettre détendre lapplication, tout en gardant le code fermé au maximum ?

43 Nom : Fabrique (Factory) Type : Creational But : Centraliser linstanciation dobjets. La solution : La notion de fabrique et le pattern « fabrique abstraite »

44 Nom : Fabrique simple (Factory) Type : Creational App pizzeria Pizza napolitaine Pizza 4 froms 4 froms FR 4 froms DE Fabrique pizza fabrique Frfabrique DE Napo FR Napo DE Contrat : Interface ou classe abstraite (italique) Implémentation de la fabrique Implémentation des pizzas sur base des contrats

45 Nom : Fabrique (Factory) Type : Creational Une dernière notion : le client consomme la «bonne fabrique abstraite» via une méthode « fabrique » Une dernière notion : le client consomme la «bonne fabrique abstraite» via une méthode « fabrique » consomm e

46 Un oeil dans le code ? une démo ? Nom : Fabrique (Factory) Type : Creational

47 Pourquoi favoriser lutilisation des principes de fabrique et fabrique abstraite ? Nom : Fabrique (Factory) Type : Creational Les constructeurs sont assez limités dans leur processus de création : ils retourne une instance de xxx. Pour permettre une plus grande évolutivité, les fabriques permettent de découpler les logiques d'interactions, de limplémentation... Ce qui permet de masquer limplémentation au consommateur de classes...

48 Pourquoi favoriser lutilisation des principes de fabrique et fabrique abstraite ? Nom : Fabrique (Factory) Type : Creational Régulièrement, nous sommes confrontés à des incertitudes du client. Les choix permettant de levés ces incertitudes peuvent être repoussés à plus loin, sans pour autant bloquer le développement des applications. Exemple : Ado.net permet de masquer, et de paramétrer limplémentation utilisée via les chaines de connexions. Pour ce faire, nous pouvons utiliser lespace de nom Db : DbConnection, DbCommand, DbDataAdapter

49 Pourquoi favoriser lutilisation des principes de fabrique et fabrique abstraite ? Nom : Fabrique (Factory) Type : Creational Les constructeurs ne laissent pas toujours deviner de leurs intentions réelles. Imaginons une classe, avec de multiples constructeurs : public Vehicle (int passengers) public Vehicle (int passengers, int horsePower) public Vehicle (int wheels, bool trailer) public Vehicle (string type)

50 Pourquoi favoriser lutilisation des principes de fabrique et fabrique abstraite ? Nom : Fabrique (Factory) Type : Creational La factory clarifie rapidement lintention du développeur public Vehicle CreateCar (int passengers) public Vehicle CreateSuv (int passengers, int horsePower) public Vehicle CreateTruck (int wheels, bool trailer) public Vehicle CreateBoat () public Vehicle CreateBike ()

51 Pourquoi favoriser lutilisation des principes de fabrique et fabrique abstraite ? Nom : Fabrique (Factory) Type : Creational Vous verrez que derrière le terme de fabrique, nous retrouvons souvent à la fois des fabriques abstraites et des méthodes de fabriques. En.net, les méthodes fabriques sont surtypées par Factory.

52 Privilégier le couplage faible favorise lévolution... I l e s t p r é f é r a b l e d i m p l é m e n t e r d e s i n t e r f a c e s ! Retour sur les brèves de comptoir... Les interfaces sont des contrats remplis par certaines instances, et consommés par dautres Encapsuler ce qui change est un gage dévolution ! Un code doit être ouvert au changement, mais fermé aux modifications... Les composants applicatifs consomment les instances, mais ne sont pas responsables de leur instanciation Nom : Fabrique (Factory) Type : Creational Centraliser les créations dinstances favorise la dissociation entre modèle et comportement. Le « new » nest pas si anodin que cela !


Télécharger ppt "Designs Patterns comment rendre son code faiblement couplé, et maintenable..."

Présentations similaires


Annonces Google