IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

ASP.NET Discussion :

DIP (Dependance Injection Principles)


Sujet :

ASP.NET

  1. #1
    Membre confirmé
    Avatar de topolino
    Profil pro
    Inscrit en
    Juillet 2003
    Messages
    1 901
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2003
    Messages : 1 901
    Points : 637
    Points
    637
    Par défaut DIP (Dependance Injection Principles)
    Bonjour,

    Je suis en train de m'interesser au Pattern DIP.
    J'ai une application contenant les couches suivants :
    1 - DAL - Repository (projet)
    2 - BLL - Model (Projet)
    3 - Service Layer - Service (projet)
    4 - Presentation Layer - Presentation (project)
    5 - User Experience Layer - WebUI (projet)

    Avant, la plupart de mes methodes et class etaient static afin que chaque couche puisse acceder facilement les unes aux autres, sachant que la couche Service par exemple ne voyait pas du tout la couche DAL car j'instancier mes object au seins des differents methodes de chaque couches.

    Mais avec le pattern DIP, ce qui me derange c'est que c'est au niveau de la couche User experience que l'on instancie tous les objets necessaires afin de les passer en parametres car les couches ne prennent plus aucunes responsabilités, et par consequnet la couche user experience a acces à toutes les differentes couches afin de produire par exemple le code suivant:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
     Repository.ProductRepository p = new Repository.ProductRepository();
    Model.ProductService a = new Model.ProductService(p);
    Service.ProductService w = new Service.ProductService(a);
    _presenter = new ProductListPresenter(this, w);
    Avant j'aurais fait plus ou moins
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    _presenter = new ProductListPresenter(this, Service.ProductService);
    Ai-je bien compris ?

    Merci à vous
    MCTS Microsoft.
    La conception : Prendre le temps pour gagner du temps.

  2. #2
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Points : 39 749
    Points
    39 749
    Par défaut
    En général pour faire de l'injection de dépendance on utilise des conteneurs IoC (Unity, StructureMap, Ninject...)
    Jette un oeil ici pour plus d'infos

  3. #3
    Membre confirmé
    Avatar de topolino
    Profil pro
    Inscrit en
    Juillet 2003
    Messages
    1 901
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2003
    Messages : 1 901
    Points : 637
    Points
    637
    Par défaut
    Pour l'instant je ne veux pas utiliser un outils d'injection de dependance afin de bien conprendre le concepte. Je trouve ca bizarre que la couche UI doit s'occuper de passer les instance des classes a utiliser non ?

    Il me semble plus simple que la couche UI appelle juste Product.GetAllProduct(); car elle ne se soucis de rien d'autre. Sachant qu'en regle general ce ne sont pas les meme personnes qui travaillent sur les meme couches de l'applications.
    MCTS Microsoft.
    La conception : Prendre le temps pour gagner du temps.

  4. #4
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Points : 39 749
    Points
    39 749
    Par défaut
    Citation Envoyé par topolino Voir le message
    Je trouve ca bizarre que la couche UI doit s'occuper de passer les instance des classes a utiliser non ?
    Effectivement : c'est exactement l'inverse de ce qu'il faut faire... La couche supérieure (l'UI) ne doit pas dépendre d'une implémentation spécifique des couches inférieures.

    C'est bien pour ça qu'il faut utiliser un outil, pour gérer la "plomberie" entre les couches sans que celles-ci aient besoin de se connaitre entre elles (elles se connaissent uniquement via des interfaces)

    Citation Envoyé par topolino Voir le message
    Il me semble plus simple que la couche UI appelle juste Product.GetAllProduct(); car elle ne se soucis de rien d'autre. Sachant qu'en regle general ce ne sont pas les meme personnes qui travaillent sur les meme couches de l'applications.
    La couche UI devrait juste connaitre l'interface qui permet d'obtenir les produits, pas son implémentation spécifique.

  5. #5
    Membre confirmé
    Avatar de topolino
    Profil pro
    Inscrit en
    Juillet 2003
    Messages
    1 901
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2003
    Messages : 1 901
    Points : 637
    Points
    637
    Par défaut
    Sans utiliser d'outil particulier pour l'intant le code suivant doit etre deporté dans le presenter ou dans la couche service et donner une interface a l'interface utilisateur. c'est ca ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    Repository.ProductRepository p = new Repository.ProductRepository();
    Model.ProductService a = new Model.ProductService(p);
    Service.ProductService w = new Service.ProductService(a);
    MCTS Microsoft.
    La conception : Prendre le temps pour gagner du temps.

Discussions similaires

  1. unity dependency injection
    Par clodo13 dans le forum Design Patterns
    Réponses: 0
    Dernier message: 25/06/2012, 14h37
  2. Réponses: 2
    Dernier message: 26/04/2012, 14h12
  3. [1.x] Dependency Injection dans le modèle
    Par jekif dans le forum Symfony
    Réponses: 2
    Dernier message: 22/02/2012, 11h50
  4. [2.x] [Dependency Injection] Problème
    Par Sikwan dans le forum Symfony
    Réponses: 4
    Dernier message: 29/07/2011, 15h26
  5. dependency injection dao Jpa
    Par allstar dans le forum JPA
    Réponses: 1
    Dernier message: 16/01/2010, 03h12

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo