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

C# Discussion :

Architecture accès aux données.


Sujet :

C#

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Développeur informatique
    Inscrit en
    Mai 2008
    Messages
    118
    Détails du profil
    Informations personnelles :
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mai 2008
    Messages : 118
    Par défaut Architecture accès aux données.
    Bonjour,

    J'ai mes entités (objets métiers) qui sont mappées sur des tables de ma base de donnée.

    J'ai une assembly qui contient mes objets métiers, et j'ai une DAL qui me permet de charger des collections de ces objets métiers.

    En terme de dépendance, l'assembly de ma DAL utilise l'assembly de mes objets métiers.

    J'ai 2 entitées : Client et Commandes. J'aurais besoin sur ma classe Client d'implémenter une propriété List<Commandes>.

    Mon soucis, c'est que du coup, j'aurais besoin dans ma classe Client de connaitre ma DAL pour charger mes Commandes. Et je créé donc une dépendance depuis mon assembly de mes objet métiers vers ma DAL.

    Cela me parait pas logique de créer une dépendance dans ce sens.
    Qu'en pensez vous ?

    Sybaris

  2. #2
    Expert confirmé

    Avatar de Philippe Vialatte
    Homme Profil pro
    Architecte technique
    Inscrit en
    Juillet 2004
    Messages
    3 029
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Architecte technique
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Juillet 2004
    Messages : 3 029
    Par défaut
    J'ai une assembly qui contient mes objets métiers, et j'ai une DAL qui me permet de charger des collections de ces objets métiers.
    Dans ce cas la, ce ne sont pas des objets metiers, tes objets, ce sont des DTO -> data transfer objects...

    http://en.wikipedia.org/wiki/Data_Transfer_Object

    Tes objets métier, normalement, leur but, c'est de te donner une valeur ajoutée (->métier) par rapport a ton système de persistance

    Chez moi, ca se traduit par DTO -> DataAccess -> Metier, avec plutôt un pattern style Repository.

    Si ton système est mappé directement sur la base de données, utilise un pattern ActiveRecord (tes objets ont la responsabilité de se sauver tous seuls), mais dans ce cas, de la même manière, tu auras DataAccess (wrappers sur la base de données & co.) -> BusinessObjects (objets avec les champs et les fonctions Save & co)...


    Mon soucis, c'est que du coup, j'aurais besoin dans ma classe Client de connaitre ma DAL pour charger mes Commandes. Et je créé donc une dépendance depuis mon assembly de mes objet métiers vers ma DAL.
    Dans ce cas la, après avoir remonte business au-dessus de DAL, tu utilise une Factory pour charger tes clients...

    Genre, dans ta classe Client, ta propriete Commandes, qui renvoie une List<Commande>, tu la code comme ca :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    public List<Commande> Commandes{
     get{
        if (_commandes == null){
           _commandes = CommandeFactory.GetCommandesByClientId(_id);
        }
        return _commandes;
      }
    }
    (et en plus, ca te gère du lazy loading, elle est pas belle, la vie ?)

    Après, cela n'engage que moi, c'est le genre de sujet ou on peut discuter pendant pas mal de jours , mais depuis, ca a plutot bien marché

    Mon Blog

    The Cake is still a lie !!!



    Vous voulez contribuer à la rubrique .NET ? Contactez-moi par MP.
    Vous voulez rédiger des articles pour la rubrique .NET ? Voici la procédure à suivre.

  3. #3
    Membre confirmé
    Profil pro
    Développeur informatique
    Inscrit en
    Mai 2008
    Messages
    118
    Détails du profil
    Informations personnelles :
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mai 2008
    Messages : 118
    Par défaut
    Bonjour,

    Tout d'abord merci pour la réponse.
    J'aurais cependant quelques questions supplémentaires :
    - La classe CommandeFactory sera codée dans quelle couche ? DTO, DataAccess ou Metier ?
    - Je pense que je n'ai pas bien compris la différence entre mes classes DTO et mes classes métiers. Est-il possible d'avoir un exemple svp ?

    Merci d'avance

    Sybaris

  4. #4
    Expert confirmé

    Avatar de Philippe Vialatte
    Homme Profil pro
    Architecte technique
    Inscrit en
    Juillet 2004
    Messages
    3 029
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Architecte technique
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Juillet 2004
    Messages : 3 029
    Par défaut
    Pour les Factory, elles vont généralement dans la couche métier.

    pour une différence entre DTO et objets métier, tu peux lire ici:
    http://msdn.microsoft.com/en-us/library/ms978717.aspx

    Si tu ne lis pas trop l'anglais, en résumé, un DTO est un objet "bête", avec juste les champs nécessaires pour contenir les données, alors qu'un objet métier va avoir des opérations spécifiques.

    Par exemple, ton objet commande va probablement avoir une liste d'article, le DTO de commande va avoir date, clientId, adresse, alors que Commande dans la partie métier aura en plus une liste d'articles, une méthode TotalPrice, une méthode AddArticle, et une Removearticle

    Mon Blog

    The Cake is still a lie !!!



    Vous voulez contribuer à la rubrique .NET ? Contactez-moi par MP.
    Vous voulez rédiger des articles pour la rubrique .NET ? Voici la procédure à suivre.

  5. #5
    Membre confirmé
    Profil pro
    Développeur informatique
    Inscrit en
    Mai 2008
    Messages
    118
    Détails du profil
    Informations personnelles :
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mai 2008
    Messages : 118
    Par défaut
    Bonjour,

    Tout d'abord merci pour le lien.
    Dans mon cas, je ne suis pas en architecture distribuée, mais je pense que cela ne change rien à l'architecture...

    A la lecture de l'article, j'en déduis que dans notre exemple, la classe Client est une classe métier (domain dans l'article), et non une classe DTO, n'est ce pas ?

    Si je m'en tiens à l'article, les données sont présentes 2 fois en mémoire : 1 fois dans les objets DTO, et une 2ème fois dans les objets métiers. Je ne trouves pas cela optimisé...
    Cela réclame en plus de faire du transfert de données entre les objets DTO et métier...

    Sybaris

Discussions similaires

  1. Réponses: 23
    Dernier message: 08/04/2014, 17h56
  2. Réponses: 0
    Dernier message: 18/11/2013, 20h46
  3. Réponses: 0
    Dernier message: 03/10/2008, 22h45
  4. [Framework] [Architecture Technique] Accès aux données
    Par tatemilio2 dans le forum Spring
    Réponses: 12
    Dernier message: 15/11/2006, 10h20
  5. [Architecture] Couche accès aux données
    Par tatemilio2 dans le forum Hibernate
    Réponses: 3
    Dernier message: 12/06/2006, 10h23

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