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 :

DTO - Portée de variable et assemblies


Sujet :

VB.NET

  1. #1
    Membre émérite Avatar de mactwist69
    Homme Profil pro
    Développement VB.NET
    Inscrit en
    Janvier 2007
    Messages
    1 707
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Saône et Loire (Bourgogne)

    Informations professionnelles :
    Activité : Développement VB.NET
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 707
    Points : 2 528
    Points
    2 528
    Par défaut DTO - Portée de variable et assemblies
    Bonjour bonjour,

    après recherches, je n'arrive pas à faire fonctionner quelque chose et je suis pourtant certain de ne pas être le premier :


    J'ai un projet transverse (PROJET1) de type DTO (classes ne contenant que des propriétés)
    Parmi ces classes : des propriétés Public, et des propriétés Friend.

    J'ai un PROJET2 qui gère l'utilisation de ces DTO.
    (Donc projet2 à une référence sur projet1)

    -> J'ai des propriétés Friend car je voudrais que certaines de ces propriétés ne soient visibles que depuis le PROPJET2, mais sinon personne d'autres.

    En cherchant, je n'ai trouvé que cette solution : Utiliser le friend assembly dans le projet 1 : <Assembly: InternalsVisibleTo("Projet2")>

    Mais rien n'y fait, il ne veut pas utiliser ma variable, "car elle est Friend"...

    Qu'est ce que je rate ??

    EDIT : Bien évidemment, comme il s'agit de deux projets, impossible de partager le même namespace...
    L'avenir appartient à ceux... dont les ouvriers se lèvent tôt. (Coluche)

  2. #2
    Membre émérite Avatar de mactwist69
    Homme Profil pro
    Développement VB.NET
    Inscrit en
    Janvier 2007
    Messages
    1 707
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Saône et Loire (Bourgogne)

    Informations professionnelles :
    Activité : Développement VB.NET
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 707
    Points : 2 528
    Points
    2 528
    Par défaut
    Je reformule pour être moins compliqué (je l’espère) :

    Est il possible de rendre certaines propriétés (non publiques) d'une classe Accessible depuis un autre projet spécifique ?
    L'avenir appartient à ceux... dont les ouvriers se lèvent tôt. (Coluche)

  3. #3
    Expert confirmé
    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 : 41
    Localisation : Belgique

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

    Informations forums :
    Inscription : Juillet 2006
    Messages : 3 932
    Points : 4 239
    Points
    4 239
    Par défaut
    Hello Mactwist,

    Je n'ai malheureusement pas de réponse à te donner sur le plan technique mais je me pose une question sur le plan conceptuel.

    Pourquoi diable souhaites-tu faire cela ?
    Kropernic

  4. #4
    Membre émérite Avatar de mactwist69
    Homme Profil pro
    Développement VB.NET
    Inscrit en
    Janvier 2007
    Messages
    1 707
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Saône et Loire (Bourgogne)

    Informations professionnelles :
    Activité : Développement VB.NET
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 707
    Points : 2 528
    Points
    2 528
    Par défaut
    Hello,

    Et bien voilà :

    De base, en POO, une classe va avoir des propriétés public, d'autre private avec des méthodes publiques qui vont manipuler ces deux types de propriétés.

    Bon, quand on développe en couche... on utilise des DTO, et on a aussi des classes qui manipule ces DTO (pour charger, enregistrer).

    D'habitude, j'imagine, que les DTO et les classes sont dans le même projet...

    Ce qui fait que les propriétés Friend des DTO sont manipulables par les classes, mais invisible pour le développeur. (tout comme les propriétés private des classes classiques)

    Mais dans mon cas, pas le choix, ces fameuse classes qui manipulent les DTO se trouvent dans un autre projet... architecture oblige...
    C'est un service qui va s'occuper de faire ces opérations (Save, Load etc.)

    EDIT : En voyant une réponse, tu m'as donné un faux espoir Kropernic !!

    Une solution HYPER moche, serait d'écrire ces propriétés friend en publiques, puis de les rendre invisible à l'intellisense.. Mais bon, c'est horrible quoi.
    L'avenir appartient à ceux... dont les ouvriers se lèvent tôt. (Coluche)

  5. #5
    Expert confirmé
    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 : 41
    Localisation : Belgique

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

    Informations forums :
    Inscription : Juillet 2006
    Messages : 3 932
    Points : 4 239
    Points
    4 239
    Par défaut
    Je reformule ma question :

    Pourquoi as-tu des propriétés Friend dans un DTO ?

    Un DTO ne contient que les infos de base. Rien à cacher donc. Non ?
    Kropernic

  6. #6
    Membre émérite Avatar de mactwist69
    Homme Profil pro
    Développement VB.NET
    Inscrit en
    Janvier 2007
    Messages
    1 707
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Saône et Loire (Bourgogne)

    Informations professionnelles :
    Activité : Développement VB.NET
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 707
    Points : 2 528
    Points
    2 528
    Par défaut
    Parce que mes DTO ont des propriétés "métier" : La vrai info, le Vrai DTO comme on l'entends.

    Et qu'il y a des infos "internes de fonctionnement" du type : "J'existe", "mon ID de Base de données"
    Et ceux là, je veux les cacher...

    Donc j'ai trois choix :

    - Soient j'arrivent a étendre le Friend à un autre projet.

    - soient je supprime ces infos... Mais à chaque méthode de ma classe qui manipule les DTO, elles devront recalculer ces infos à chaque fois pour savoir quoi faire avec (vérifier l'existence pour ajout, mise a jour etc...)

    - Soient je rends tout publique, au risque que les développeurs manipule ces données d'une mauvaise manière.
    L'avenir appartient à ceux... dont les ouvriers se lèvent tôt. (Coluche)

  7. #7
    Expert confirmé
    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 : 41
    Localisation : Belgique

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

    Informations forums :
    Inscription : Juillet 2006
    Messages : 3 932
    Points : 4 239
    Points
    4 239
    Par défaut
    Donc si je comprends, tu voudrais par exemple que la couche BLL ne puisse pas accéder à l'id lorsqu'elle manipule le DTO mais que, lorsqu'elle le transmet à la couche DAL (pour le persister en DB par exemple), cette dernière pourra accéder à l'id pour faire son boulot.

    C'est bien ça ?

    J'suis loin d'être un pro en architecture mais cela me semble quand même bizarre cette affaire-là.

    J'espère que quelqu'un pourra te répondre !
    Kropernic

  8. #8
    Membre émérite Avatar de mactwist69
    Homme Profil pro
    Développement VB.NET
    Inscrit en
    Janvier 2007
    Messages
    1 707
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Saône et Loire (Bourgogne)

    Informations professionnelles :
    Activité : Développement VB.NET
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 707
    Points : 2 528
    Points
    2 528
    Par défaut
    C'est presque ça :

    Je souhaite que dans le projet Interface Utilisateur, on importe le projet DTO et qu'on ne manipule que les données métier.

    Mais que la BLL, elle, puisse utiliser des propriétés "private" de ces même DTO.
    L'avenir appartient à ceux... dont les ouvriers se lèvent tôt. (Coluche)

  9. #9
    Expert confirmé
    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 : 41
    Localisation : Belgique

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

    Informations forums :
    Inscription : Juillet 2006
    Messages : 3 932
    Points : 4 239
    Points
    4 239
    Par défaut
    Citation Envoyé par mactwist69 Voir le message
    - soient je supprime ces infos... Mais à chaque méthode de ma classe qui manipule les DTO, elles devront recalculer ces infos à chaque fois pour savoir quoi faire avec (vérifier l'existence pour ajout, mise a jour etc...)
    Si ces infos sont calculables, c'est qu'il ne s'agit pas d'infos de base :-/
    Pour le CRUD, il y a MERGE en SQL qui évite d'avoir à s'emmerder dans la BLL pour savoir si on doit apperler DAL.Insert ou DAL.Update (dans de s'emmerder dans la DAL si on a opté pour DAL.Save).

    Citation Envoyé par mactwist69 Voir le message
    - Soient je rends tout publique, au risque que les développeurs manipule ces données d'une mauvaise manière.
    Si tu as peur qu'ils modifient l'id par exemple, rend le ReadOnly et ça répond au besoin non ? Ou bien le dev ne peux vraiment pas connaître l'id de l'objet en DB ?
    Kropernic

  10. #10
    Membre émérite Avatar de mactwist69
    Homme Profil pro
    Développement VB.NET
    Inscrit en
    Janvier 2007
    Messages
    1 707
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Saône et Loire (Bourgogne)

    Informations professionnelles :
    Activité : Développement VB.NET
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 707
    Points : 2 528
    Points
    2 528
    Par défaut
    BAh non, ma BLL doit pouvoir remplir l'info ID ,donc pas de readè-only
    Et je veux le faire qu'une seule fois au chargement....

    Et je veux pas que n'importe qui puisse changer l'info...
    L'avenir appartient à ceux... dont les ouvriers se lèvent tôt. (Coluche)

  11. #11
    Expert confirmé
    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 : 41
    Localisation : Belgique

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

    Informations forums :
    Inscription : Juillet 2006
    Messages : 3 932
    Points : 4 239
    Points
    4 239
    Par défaut
    Citation Envoyé par mactwist69 Voir le message
    BAh non, ma BLL doit pouvoir remplir l'info ID ,donc pas de readè-only
    Et je veux le faire qu'une seule fois au chargement....

    Et je veux pas que n'importe qui puisse changer l'info...
    Le problème ne serait-il pas là ? Ce n'est pas la BLL qui doit remplir l'id. Ou alors, uniquement via le constructeur. Mais vu que normalement, l'objet est créé dans la DAL s'il vient de la DB ou "sans id" s'il est nouveau. Non ?

    Sinon, j'ai quand même p-e une solution de contournement pour toi. Tu peux les masquer dans l'intellisense avec l'attribut EditorBrowsable(EditorBrowsableState.Never).
    C'est pas top mais c'est toujours un début :-/
    Kropernic

  12. #12
    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 : 36
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : CTO
    Secteur : Finance

    Informations forums :
    Inscription : Février 2010
    Messages : 3 611
    Points : 9 743
    Points
    9 743
    Billets dans le blog
    3
    Par défaut
    Citation Envoyé par Kropernic Voir le message
    Sinon, j'ai quand même p-e une solution de contournement pour toi. Tu peux les masquer dans l'intellisense avec l'attribut EditorBrowsable(EditorBrowsableState.Never).
    C'est pas top mais c'est toujours un début :-/
    Ca ne marchera que si la DLL est importée. Si on ajoute une référence au projet directement, ca ne marche pas

    Sinon mactwist69 je ne vois aucun intérêt à faire ca à part se prendre le chou inutilement... Imagine si chaque développeur créait sa propre tambouille dans un coin et puis décidait de la rendre invisible aux autres. WTF
    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.

  13. #13
    Membre émérite Avatar de mactwist69
    Homme Profil pro
    Développement VB.NET
    Inscrit en
    Janvier 2007
    Messages
    1 707
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Saône et Loire (Bourgogne)

    Informations professionnelles :
    Activité : Développement VB.NET
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 707
    Points : 2 528
    Points
    2 528
    Par défaut
    En fait le problème vient du fait que j'avais une seule classe...
    Et que j'ai voulu en faire un DTO + une classe de méthodes... et que ça marche pas comme ça...

    Donc tant pis, je vais réecrire en faisant des vrais DTO...

    +1 DotNetMatt, je pensais gagner du temps... et finalement ça allait juste être moche.
    Il m'a fallu l'aprem pour ne plus être dans le dénie !!!
    L'avenir appartient à ceux... dont les ouvriers se lèvent tôt. (Coluche)

  14. #14
    Expert confirmé
    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 : 41
    Localisation : Belgique

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

    Informations forums :
    Inscription : Juillet 2006
    Messages : 3 932
    Points : 4 239
    Points
    4 239
    Par défaut
    Au final, j'avais raison depuis le début en fait ?
    Kropernic

  15. #15
    Membre émérite Avatar de mactwist69
    Homme Profil pro
    Développement VB.NET
    Inscrit en
    Janvier 2007
    Messages
    1 707
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Saône et Loire (Bourgogne)

    Informations professionnelles :
    Activité : Développement VB.NET
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 707
    Points : 2 528
    Points
    2 528
    Par défaut
    Tout à fait...

    C'est toi qui m'a convaincu d'ailleurs... juste avant que DotNetMAtt confirme le n'importe quoi.
    L'avenir appartient à ceux... dont les ouvriers se lèvent tôt. (Coluche)

Discussions similaires

  1. [FLASH MX] Portée des variables ???
    Par mic79 dans le forum Flash
    Réponses: 2
    Dernier message: 08/02/2005, 10h21
  2. Portée des variables vbscript vers ASP
    Par Immobilis dans le forum ASP
    Réponses: 3
    Dernier message: 03/11/2004, 10h14
  3. [XSL]Problème de portée des variables
    Par djulesp dans le forum XSL/XSLT/XPATH
    Réponses: 6
    Dernier message: 17/09/2004, 10h34
  4. [Portée] portée des variables
    Par parksto dans le forum Langage
    Réponses: 7
    Dernier message: 09/05/2004, 21h05
  5. [FLASH MX 2004][XML]portée de variable
    Par marco_ dans le forum Flash
    Réponses: 8
    Dernier message: 29/04/2004, 15h47

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