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 :

Spécification des Interface dans la couche Business et DataAccess


Sujet :

ASP.NET

  1. #1
    CUCARACHA
    Invité(e)
    Par défaut Spécification des Interface dans la couche Business et DataAccess
    Salut,

    J'aimerais bien voir un exemple concret car personnellement, je n'utilise pratiquement pas les interfaces. Uniquement les classes abstraites.

    La dernière fois que j'ai été confronté à un architecte interfacien, on ne s'est pas vraiment entendu , le plus rigolo c'est que je viens d'apprendre que 4 ans après (avec un dépassement de budget de l'ordre du million d'euros) il sont encore en train d'essayer de maintenir son projet que lui semble avoir été capable de comprendre.

    Note que cette remarque n'est pas du tout un reproche, j'aimerais apprendre ce type de technique au cas où j'y serais confronté à nouveau.

    Juste pour info, je crée des classes d'entrée et de sorties (façades) qui sont (normalement) passives. Elles permettent de passer les paramètres aux méthodes STATIQUES de la couche business dont les méthode qui ne renvoient des valeurs ne renvoient QUE des façades.

    Les façades sont toujours sérialisables.

    Je pourrais peut être créer une interface IBusiness dont les méthodes pourraient toujours renvoyer un membre de IFacadeOutput (dont tous les membres de facade hériteraient) et prendre en entrée IFacadeInput.

    Mais je n'arrive pas à voir la valeur ajoutée de cette technique...

    A tous, notez qu'un très bon moyen de ne pas avoir un gros boxon dans un projet et d'encapsuler chaque couche dans une DLL différente et d'avoir un DLL Domain qui contient toutes les façaces.

    Après si ta couche présentation ne référence que la couche business et pas la couche data, tu es tranquille. Ca marche bien avec les using mais on peut être tenté de faire des écarts.

    Dans VS 2010 il y a un analyseur de référence qui fait apparaitre les boulettes genre je remplis direct un datacontrol avec une query sans passer par la couche data... C'est assez simple et du peu que j'ai vu, ça a l'air assez efficace.

    ++

    Laurent

  2. #2
    Membre éprouvé
    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
    Par défaut
    Interessant tous ca.

    Peux tu me donner un exemple :
    Citation Envoyé par Laurent Jordi
    Juste pour info, je crée des classes d'entrée et de sorties (façades) qui sont (normalement) passives
    Car pour l'instant j'utilise une couche DAL et BLL. La BLL referencie la DAL et appelle les methodes static de chaque class.
    Quel est l'utilite de passer par une facade ?

    Merci

  3. #3
    CUCARACHA
    Invité(e)
    Par défaut
    L'intérêt des façades est de toujours véhiculer des données fortement typées et surtout d'avoir ce typage centralisé. Ainsi, si jamais tu changes un int en décimal dans la façade, tu es certain que tout ton programme prendra cette modification en compte.

    J'essayerais de te passer un exemple simple un peu plus tard, là je bosse je n'ai pas le temps...

    ++

    Laurent

  4. #4
    CUCARACHA
    Invité(e)
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Web;
    
    namespace BOODS.Objects.BusinessLayer.Facades
    {
        /// <summary>
        /// Classe facade de manipulation des droits
        /// </summary>
        [Serializable]
        public class Droits : _FacadesBase
        {
            /// <summary>
            /// EF:DROITS.Id
            /// </summary>
            public int Id { get; set; }
            /// <summary>
            /// EF:DROITS.Nom
            /// </summary>
            public string Nom { get; set; }
            /// <summary>
            /// Constructeur neutre
            /// </summary>
            public Droits()
            {
            }
            /// <summary>
            /// Constructeur actif
            /// </summary>
            /// <param name="id"></param>
            /// <param name="nom"></param>
            public Droits(int id, string nom)
            {
                this.Id = id;
                this.Nom = nom;
            }
        }
    }
    Voilà,

    L'intérêt de rendre cette classe sérialisable est de pouvoir s'en servir comme unité de stockage dans les objets comme le ViewState, la session ou l'application.

    Ca facilite aussi les échanges lorsqu'on travaille avec des web service.

    D'ailleurs, on pourrait comparer une façade au DataContract d'un webservice.

    ++

    Laurent

  5. #5
    Membre éprouvé
    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
    Par défaut
    Merci mais pour moi c'est un business object (objet metier).
    C'est quoi la difference ?

  6. #6
    CUCARACHA
    Invité(e)
    Par défaut
    Oui c'est un objet métier...

    Par exemple, un client peut avoir une partie de ses caractéristiques dans une table et une partie dans une autre. Dans ce cas, l'objet métier, encapsule
    l'ensemble des informations dans une seule classe.

    ++

    Laurent

  7. #7
    Membre éprouvé
    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
    Par défaut
    je suis d'accord avec toi. Pour moi une facade c'etait autre chose que ca.
    Je ne savais pas que objet metier == facade.

    Pas de pb alors

  8. #8
    CUCARACHA
    Invité(e)
    Par défaut
    Non un objet métier n'est pas une façade, une façade ne comporte que des propriété, pas de méthode.

    La couche métier contient les méthodes qui permettent d'obtenir les objets métiers qui sont défini par leur façade.

    ++

    Laurent

  9. #9
    Membre éprouvé
    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
    Par défaut
    je parle d'object metier et non de la BLL (business logic layer).
    Pour moi un object metier est une class avec que des proprietes et constructeurs. La plus part du tps une table de la base de donnee == 1 object metiers.

    la BLL ou DAL ou meme UI manipule les objects metiers

  10. #10
    CUCARACHA
    Invité(e)
    Par défaut
    Dasn ce cas nous sommes d'accord à ceci près que mes objets métiers sont scindés en deux : BLL (méthodes statiques) Facades (Propriétés). Effectivement la DAL génère des objets de type façade qui sont consommés ou retournés par la BLL.

    ++

    Laurent

  11. #11
    CUCARACHA
    Invité(e)
    Par défaut
    Notes qu'étant autodidacte, il est possible que je n'utilise pas toujours les bon termes pour désigner les choses...

    ++

    Laurent

  12. #12
    Membre éprouvé
    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
    Par défaut
    y a pas de pb.

    Pour ma part j'essaye de comprendre les design pattern.

    Je te donne un lien expliquant la facade : http://www.dofactory.com/Patterns/PatternFacade.aspx

  13. #13
    CUCARACHA
    Invité(e)
    Par défaut
    Ben le lien que tu cites c'est exactement ce que je fais mais c'est en anglais...

    ++

    Laurent

  14. #14
    Rédacteur
    Avatar de The_badger_man
    Profil pro
    Développeur .NET
    Inscrit en
    Janvier 2005
    Messages
    2 745
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Janvier 2005
    Messages : 2 745
    Par défaut
    Je pense que les façades de Laurent sont en fait ce qui est communément appelé des DTO (data transfert object).

    La différence avec des objet business et qu'il ne contiennent aucune logique business. Ils ne servent qu'à transférer des données d'une couche à l'autre.

    En DDD (Domain Driver Design) les objets business (domain objets) n'ont pas vocation à être exposés en dehors de la couche business. On passe par des DTO pour transférer des portions de données aux autres couches. Par exemple, si une interface graphique a besoin d'afficher le nom et le prénom d'une personne, on ne lui passe pas l'objet Personne en entier (ta couche business ne souhaite pas forcément que l'UI puisse accéder aux propriétés NuméroCarteCrédit et CodeSecret de Personne...). On ne lui passe qu'un DTO contenant deux propriétés: Nom et Prénom.
    Les Domain Objects contient des données (propriétés) mais aussi de la logique métier (méthode).

    Le terme façade fait plutôt référence au pattern façade qui permet de masquer la complexité (niveau logique applicative) d'un sous-système.
    Les règles du forum
    Le trio magique : FAQ + Cours + fonction rechercher
    Mes articles
    Pas de questions par messages privés svp

    Software is never finished, only abandoned.

  15. #15
    CUCARACHA
    Invité(e)
    Par défaut
    Ok ok... j'apprends... M'enfin, même avec ma terminologie, cettre structure est particulièrement solide et évolutive.

    Niveau stats, sur un projet de 5 mois avec environ 300 classes (toutes couches confondues) je n'ai fait que 60 bugs dont 40 n'étaient que des bugs type css ou des features de présentation.

    ++

    Laurent

  16. #16
    Membre éprouvé
    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
    Par défaut
    Pour ma part c'est la couche metier (BLL) qui possedent tous traitements et comportements (methodes) afin de remplir des objects metiers qui eux n'ont que des proprietes afin d'etre transportés de couche en couche.

  17. #17
    CUCARACHA
    Invité(e)
    Par défaut
    Bon, on fait tous la même chose mais on s'exprime différemment...

    ++

    Laurent

  18. #18
    Membre Expert

    Profil pro
    Inscrit en
    Octobre 2005
    Messages
    1 377
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Octobre 2005
    Messages : 1 377
    Par défaut
    Salut Laurent,

    Les interfaces c'est vachement utile pour les tests unitaires, car sans il est difficile de mocker pour isoler des couches

    l'IOC est une utilisation intéressantes des interfaces un peu de lecture si ça t'interesse :

    http://martinfowler.com/articles/injection.html
    Échouer, c'est avoir la possibilité de recommencer de manière plus intelligente.

    Twitter Blog Mon site

    Mon article sur l'agilité

  19. #19
    Expert confirmé
    Avatar de Immobilis
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Mars 2004
    Messages
    6 559
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Mars 2004
    Messages : 6 559
    Par défaut
    Salut,

    Les interfaces sont avant tout un "contrat" qui permet de determiner avec certitude la liste des propriétés et méthodes disponibles dans les classes qui implémentent l'interface.

    Les interfaces permettent d'utiliser le pattern "Factory", comme par exemple la fabrique d'objet de connection "DbProviderFactory". Il suffit de regarder ce code: http://dotnet.developpez.com/faq/asp...onet_procstock, pour comprendre l'intérêt. Ce code fonctionnera quelque soit la base de données, il suffit de changer la chaine de connexion. Grace aux interfaces on généralise le code.

    N'y aurait-il pas confusion entre "abstract" et "interface"?
    Indicate that a class is intended only to be a base class of other classes.
    Qui permettent de factoriser des méthodes et des propriétés communes par héritage. Dans ce cas l'implémentation des méthodes est la même pour toutes les classes qui héritent sauf si tu fais un override, mais je ne vois pas l'intérêt. Ce qui n'est pas le cas des interfaces puisque aucune méthode n'y est implémentée.

    A+
    "Winter is coming" (ma nouvelle page d'accueil)

  20. #20
    CUCARACHA
    Invité(e)
    Par défaut
    Salut

    Notez que je savais ce quétait une interface et les rares fois où je les utilisais c'était dans WCF.

    Merci pour ces infos. Utilisant le générateur automatique de tests unitaires de VSTS je n'ai jamais été confronté à ce cas d'utilisation.

    ++

    Laurent

Discussions similaires

  1. insérer des données dans oracle via business objects
    Par syntax_error dans le forum SQL
    Réponses: 1
    Dernier message: 22/10/2010, 14h13
  2. interet des interfaces dans une architecture n-tiers
    Par anouar204 dans le forum Architecture
    Réponses: 1
    Dernier message: 28/01/2010, 19h14
  3. Stocker des variables dans la couche application
    Par mumuri dans le forum Débuter avec Java
    Réponses: 5
    Dernier message: 21/08/2009, 17h33
  4. Utilisation des interfaces dans des méthodes
    Par kyrilkarlier dans le forum Windows Forms
    Réponses: 7
    Dernier message: 26/05/2009, 14h29
  5. L’utilité des interfaces dans l’orienté objet
    Par bilred dans le forum Langage
    Réponses: 4
    Dernier message: 09/03/2009, 09h55

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