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

VB.NET Discussion :

Question à propos des DTO's


Sujet :

VB.NET

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre expérimenté
    Avatar de Kropernic
    Homme Profil pro
    Analyste / Programmeur / DBA
    Inscrit en
    Juillet 2006
    Messages
    3 932
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : Belgique

    Informations professionnelles :
    Activité : Analyste / Programmeur / DBA
    Secteur : Distribution

    Informations forums :
    Inscription : Juillet 2006
    Messages : 3 932
    Par défaut Question à propos des DTO's
    Hello à tous,

    J'ai récemment découvert une série de 3 articles via ce message.

    N'ayant jamais eu de cours d'archi, je me forme sur le tas et cette série d'article tombe à pic !

    Notemment, dans la partie où il traite des DTOParser et notamment des ordinaux afin d'accéder aux éléments des datareaders via leur index plutôt que leur nom (car c'est plus performant).

    Pour un DTO simple, pas de souci. Mais comment fait-on pour un DTO qui contient d'autres DTO's ?

    Prenons par exemple une classe Tel (pour téléphone) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    Public Class Tel
        Public Property Id As Integer
        Public Property Type As TypeTel
        Public Property Pays As Pays
        Public Property Num As String
     
        Public Sub New(ByVal id As Integer, ByVal type As TypeTel, ByVal pays As Pays, ByVal num As String)
            Me.Id = id
            Me.Type = type
            Me.Pays = pays
            Me.Num = num
        End Sub
    End Class
    Où TypeTel indique de quel type de téléphone il s'agit (fixe, portable, fax, etc.) et Pays indique le pays histoire d'avoir l'indicatif téléphonique du-dit pays.

    Donc en suivant l'article, je commence vaillamment à créer une classe ParserTel comme suit :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    Public Class Parser_Tel
     
        Private ord_id As Integer
        Private ord_num As Integer
     
        Public Function PopulateDTO(reader As System.Data.SqlClient.SqlDataReader) As Tel
     
        End Function
     
        Public Sub PopulateOrd(reader As System.Data.SqlClient.SqlDataReader)
     
        End Sub
    End Class
    Mais je bloque pour Pays et TypeTel. Toutes les données nécessaires à la création de ces deux instances se trouvent dans la datareader (pour ne pas devoir refaire un accès db pou récupérer le pays et le type sur base de leur Id).
    Faut-il faire appel au parser du DTO Pays dans la fonction PopulateDTO ??

    J'espère avoir été clair

  2. #2
    Modérateur
    Avatar de DotNetMatt
    Homme Profil pro
    CTO
    Inscrit en
    Février 2010
    Messages
    3 611
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : CTO
    Secteur : Finance

    Informations forums :
    Inscription : Février 2010
    Messages : 3 611
    Billets dans le blog
    3
    Par défaut
    Citation Envoyé par Kropernic Voir le message
    Mais comment fait-on pour un DTO qui contient d'autres DTO's ? Faut-il faire appel au parser du DTO Pays dans la fonction PopulateDTO ??
    Oui il le faut, sinon ça t'oblige à implémenter deux fois le code nécessaire à la création d'un objet PaysDTO, ce qui est une perte de temps, et qui va te compliquer la vie lors des maintenances
    Less Is More
    Pensez à utiliser les boutons , et les balises code
    Desole pour l'absence d'accents, clavier US oblige
    Celui qui pense qu'un professionnel coute cher n'a aucune idee de ce que peut lui couter un incompetent.

  3. #3
    Membre expérimenté
    Avatar de Kropernic
    Homme Profil pro
    Analyste / Programmeur / DBA
    Inscrit en
    Juillet 2006
    Messages
    3 932
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : Belgique

    Informations professionnelles :
    Activité : Analyste / Programmeur / DBA
    Secteur : Distribution

    Informations forums :
    Inscription : Juillet 2006
    Messages : 3 932
    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
    Public Class Parser_Tel
     
        Private ord_id As Integer
        Private ord_num As Integer
     
        Public Function PopulateDTO(reader As System.Data.SqlClient.SqlDataReader) As Tel
            Dim tel As New Tel
            tel.Id = reader.GetInt32(ord_id)
            tel.Num = reader.GetString(ord_num)
     
            Dim parser As New Parser_Pays
            parser.PopulateOrd(reader)
            tel.Pays = parser.PopulateDTO(reader)
     
            Return tel
        End Function
     
        Public Sub PopulateOrd(reader As System.Data.SqlClient.SqlDataReader)
            ord_id = reader.GetOrdinal("TEL_ID")
            ord_num = reader.GetOrdinal("TEL_NUM")
        End Sub
    End Class
    Je dois encore faire pour le type mais pour le pays, ça donne quelque chose dans ce goût là non ?

  4. #4
    Modérateur
    Avatar de DotNetMatt
    Homme Profil pro
    CTO
    Inscrit en
    Février 2010
    Messages
    3 611
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : CTO
    Secteur : Finance

    Informations forums :
    Inscription : Février 2010
    Messages : 3 611
    Billets dans le blog
    3
    Par défaut
    Oui tout à fait, comme ça le jour où tu modifies la structure de ton objet Pays, tu as juste à modifier la classe Parser_Pays et le tour est joué, tu n'auras pas besoin de répercuter ces modifications ailleurs.

    Petit conseil au passage, n'oublie pas de "blinder" tes parser, en vérifiant que les valeurs sont bien dans le SqlDataReader. Si elles n'y sont pas, prévois de mettre une valeur par défaut, ou de lancer un traitement particulier, ou une erreur.
    Less Is More
    Pensez à utiliser les boutons , et les balises code
    Desole pour l'absence d'accents, clavier US oblige
    Celui qui pense qu'un professionnel coute cher n'a aucune idee de ce que peut lui couter un incompetent.

  5. #5
    Membre expérimenté
    Avatar de Kropernic
    Homme Profil pro
    Analyste / Programmeur / DBA
    Inscrit en
    Juillet 2006
    Messages
    3 932
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : Belgique

    Informations professionnelles :
    Activité : Analyste / Programmeur / DBA
    Secteur : Distribution

    Informations forums :
    Inscription : Juillet 2006
    Messages : 3 932
    Par défaut
    Oki doki !

    Merci du conseil

  6. #6
    Membre expérimenté
    Avatar de Kropernic
    Homme Profil pro
    Analyste / Programmeur / DBA
    Inscrit en
    Juillet 2006
    Messages
    3 932
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : Belgique

    Informations professionnelles :
    Activité : Analyste / Programmeur / DBA
    Secteur : Distribution

    Informations forums :
    Inscription : Juillet 2006
    Messages : 3 932
    Par défaut
    Pas si résolu que ça finalement.

    Mais plus rien à voir avec l'architecture.

    Tout l'intérêt d'utiliser les ordinaux est d'accéder aux items via l'index en utilisant la méthode GetXXXX du datareader où XXXX est le type approprié (ça évite le castint également).

    Seulement pour les objets de type Integer, il existe juste GetInt32 mais ça colle pas.... Je trouve ça un peu moche d'aller foutre un cast là alors que tout le reste fonctionne sans cast.

    Une solution alternative et élégante ? Suis-je passé à côté de quelque chose ?


    EDIT : J'étais bien passé à côté de quelque chose... La colonne que je récupère avec GetInt32 est de type Tinyint dans SQL SERVER

Discussions similaires

  1. question à propos des containeurs
    Par bountykiller dans le forum C++
    Réponses: 4
    Dernier message: 02/10/2005, 13h21
  2. Question à propos des états
    Par rangernoir dans le forum IHM
    Réponses: 4
    Dernier message: 30/09/2005, 14h38
  3. Question à propos des compilateurs
    Par elf dans le forum Autres éditeurs
    Réponses: 4
    Dernier message: 20/07/2005, 17h00
  4. Question à propos des niveaux de transaction
    Par davy.g dans le forum Oracle
    Réponses: 3
    Dernier message: 18/01/2005, 15h31
  5. Une question à propos des thread
    Par tscoops dans le forum C++Builder
    Réponses: 4
    Dernier message: 07/11/2003, 14h03

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