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

 .NET Discussion :

Imbriquer un ensemble de <Class> dans un <Module>. [VB.NET]


Sujet :

.NET

  1. #1
    Invité
    Invité(e)
    Par défaut Imbriquer un ensemble de <Class> dans un <Module>.
    Bonjour à tous.

    Juste une question simple pour ceux qui savent.
    Est-ce une bonne pratique d'imbriquer une classe dans un module ou au contraire une mauvaise pratique ?

    Idem pour les structures tant qu'on y est.

    Namespace.Module.Class.Sub() => Bon ?
    Namespace.Module.Structure.Property.Get() => Bon ?

    Si c'est déconseillé, pourquoi ?



    Merci.

  2. #2
    Expert confirmé
    Avatar de Pragmateek
    Homme Profil pro
    Formateur expert .Net/C#
    Inscrit en
    Mars 2006
    Messages
    2 635
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Formateur expert .Net/C#
    Secteur : Conseil

    Informations forums :
    Inscription : Mars 2006
    Messages : 2 635
    Points : 4 062
    Points
    4 062
    Par défaut
    AFAIK les modules n'ont pas grand intérêt et servent juste a agréger des fonctions globales.

    D'ailleurs il n'y a pas d'équivalent en C#, le plus proche étant les classes statiques.

    Donc met plutôt tes classes dans des namespaces directement.
    Et si tu as une classe utilisée uniquement localement par une autre classe tu peux éventuellement la définir au sein de cette classe même.
    Formateur expert .Net/C#/WPF/EF Certifié MCP disponible sur Paris, province et pays limitrophes (enseignement en français uniquement).
    Mon blog : pragmateek.com

  3. #3
    Invité
    Invité(e)
    Par défaut
    Salut,

    Oui, je sais qu'il n'y a pas d'équivalent en C#.
    (Pour du C#, les modules sont des sealed class)

    Ma question est plutôt, quel risque puis-je avoir si j'écris du code de temps en temps avec des Structures/Classes/Interface à l'intérieur d'un autre conteneur Module.
    J'ai fait un test pour voir si le code été compatible CLS, et cela fonctionne.


    Je ne cherche pas spécialement de débat sur les qualités d'un module, mais cherche à savoir les éventuelles dis-fonctionnement qui pourrait arriver dans certaines situations. Je sais que c'est compatible avec Excel VBA par exemple, c'est déjà un bon début (mais il me manque le milieu et la fin on va dire ).


    Et si c'est réellement déconseillé de faire ça, quels seraient les arguments ?

  4. #4
    Expert confirmé
    Avatar de Pragmateek
    Homme Profil pro
    Formateur expert .Net/C#
    Inscrit en
    Mars 2006
    Messages
    2 635
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Formateur expert .Net/C#
    Secteur : Conseil

    Informations forums :
    Inscription : Mars 2006
    Messages : 2 635
    Points : 4 062
    Points
    4 062
    Par défaut
    AFAIK les modules n'existent pas dans le CLS, ils sont traduits par le compilateur VBC en classes .Net à la génération du CIL.

    Donc à priori pas de "dysfonctionnement".

    L'argument contre serait cette fonctionnalité d'export automatique des membres du module, donc création de variables/méthodes/types globaux, ce qui est une mauvaise pratique admise depuis au moins 1/4 de siècle.
    Formateur expert .Net/C#/WPF/EF Certifié MCP disponible sur Paris, province et pays limitrophes (enseignement en français uniquement).
    Mon blog : pragmateek.com

  5. #5
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par Pragmateek Voir le message
    L'argument contre serait cette fonctionnalité d'export automatique des membres du module, donc création de variables/méthodes/types globaux, ce qui est une mauvaise pratique admise depuis au moins 1/4 de siècle.
    Avec COM Interop par exemple, il n'est pas possible de transformer directement un Module VB(7 ou +) en module VBA par exemple. J'aurai bien aimé.
    Et les constantes et Variables/Property/Sub etc... Shared ne sont pas (directement) prise en charge.

    Et sinon, les modules conteneurs sont transformés en classe non conteneur.

    Il n'est pas possible en VBA d'écrire :
    Dim a As NomProject.NomModule.NomClasse
    comme c'est le cas en VB7.

    En revanche, on peut écrire:
    Dim a As NomProject.NomModule.NomType

    Sinon, pour le 1/4 de siècle, le VBA est assez vieux et il est limité.
    Un point d'entrée sous forme d'une propriété Get pour accéder à une hiérarchie est la meilleur solution en VBA comme c'est le cas avec le modèle object d'Excel. Il n'y a pas de Namespace par exemple donc il faut faire avec les moyens du bord. Si on pouvait le faire avec Excel, on utiliserai Imports Namespace comme en VB7 et toutes les Propriétés Get serait contenu dans un Namespace, mais il n'y a pas d'import et le nom du project devant le nom d'une propriété Public n'est que Optionnel ce qui n'est pas le cas des Namespaces en VB7. Le VB7 est une grosse évolution du VB6 où la plupart des défauts du VB6/VBA ont été supprimé un par un.

    Mais bon, si il n'y a réellement que ça, OK. J'en prend note, merci.
    C'était surtout pour m'informer.


    Merci.
    @+

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 4
    Dernier message: 16/04/2009, 01h43
  2. Réponses: 6
    Dernier message: 23/09/2005, 12h54
  3. [Language] Explications classe définie dans une classe
    Par etiennegaloup dans le forum Langage
    Réponses: 6
    Dernier message: 13/09/2005, 22h15
  4. [JAR]Class-Path dans le fichier Manifest
    Par Kleb dans le forum Général Java
    Réponses: 5
    Dernier message: 08/01/2005, 08h51
  5. [GEF]class Figure dans container SWING ?
    Par Albarad dans le forum Eclipse Java
    Réponses: 2
    Dernier message: 01/06/2004, 12h12

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