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 :

utilité de l'enumbuilder ?


Sujet :

VB.NET

  1. #1
    Expert éminent sénior Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 154
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 154
    Points : 25 072
    Points
    25 072
    Par défaut utilité de l'enumbuilder ?
    bonjour

    juste pour savoir à quoi pourrait servir l'enumbuilder si on ne peut pas l'utilisé en mode design

    si quelqu'un a une idée d'un cas concret ...
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

  2. #2
    Membre confirmé
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    547
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 547
    Points : 627
    Points
    627
    Par défaut
    Salut,

    bah comme tout l'Emit, le champ d'application est extremement restreint. Mais etant donné que l'objectif de l'Emit est de pouvoir créer un assembly fonctionnel uniquement par injection d'IL, pour garder une API coherente, ils l'ont rajouté (ca coute pas bien cher, c'est juste une specialisation d'un typebuilder).

    Apres, vu que tu peux faire de l'Emit pour sauvegarder un assembly (ca perd enormement de son interet dans ce cas, par rapport à codedom), on pourrait imaginer par exemple une appli qui genererai une DAL à partir d'une DB et qui produirai une enum pour decrire les colones.

    Bon, exemple à deux sous, mais AMHA, c'est plus une question de coherence que d'utilité reelle (d'ailleurs, au lieu de faire des enumbuilder, il devrait penser un jour à integrer un delegatebuilder qui serait autrement plus utile =( ).

  3. #3
    Inactif  
    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Janvier 2007
    Messages
    6 604
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France

    Informations professionnelles :
    Activité : Chef de projet NTIC

    Informations forums :
    Inscription : Janvier 2007
    Messages : 6 604
    Points : 13 314
    Points
    13 314
    Par défaut
    Bonjour,

    SirJulio, tu peux donner des exemples concret d'utilisation de l'Emit ?

    Car, contrairement à CodeDom, dont j'ai l'utilité pas quotidienne (loin de là) mais presque, je n'ai jamais eu de cas où utiliser l'Emit et n'ai jamais vraiment compris son utilité réelle. (je ne parle pas de son fonctionnement, mais de son utilité - en dehors de l'écriture d'un compilo .Net, cela va de soit).


    Merci.

    Je ne réponds pas aux questions techniques par MP ! Le forum est là pour ça...


    Une réponse vous a aidé ? utiliser le bouton

    "L’ennui dans ce monde, c’est que les idiots sont sûrs d’eux et les gens sensés pleins de doutes". B. Russel

  4. #4
    Rédacteur
    Avatar de SaumonAgile
    Homme Profil pro
    Team leader
    Inscrit en
    Avril 2007
    Messages
    4 028
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Team leader
    Secteur : Conseil

    Informations forums :
    Inscription : Avril 2007
    Messages : 4 028
    Points : 6 334
    Points
    6 334
    Par défaut
    Son exemple de génération de DAL est très représentatif. Au lieu de générer les sources de l'assembly à partir de la liste des champs/tables (pour ensuite les compiler en assembly), tu génères directement l'assembly en question.

    EDIT : Ensuite je ne veux pas trop m'avancer (n'étant pas expert), mais je pense que la programmation orientée aspect est basée sur l'injection de code IL dans les assemblies. Donc ici, ça doit être utile aussi.
    Besoin d'un MessageBox amélioré ? InformationBox pour .NET 1.1, 2.0, 3.0, 3.5, 4.0 sous license Apache 2.0.

    Bonnes pratiques pour les accès aux données
    Débogage efficace en .NET
    LINQ to Objects : l'envers du décor

    Mon profil LinkedIn - MCT - MCPD WinForms - MCTS Applications Distribuées - MCTS WCF - MCTS WCF 4.0 - MCTS SQL Server 2008, Database Development - Mon blog - Twitter

  5. #5
    Inactif  
    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Janvier 2007
    Messages
    6 604
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France

    Informations professionnelles :
    Activité : Chef de projet NTIC

    Informations forums :
    Inscription : Janvier 2007
    Messages : 6 604
    Points : 13 314
    Points
    13 314
    Par défaut
    Citation Envoyé par SaumonAgile Voir le message
    Son exemple de génération de DAL est très représentatif. Au lieu de générer les sources de l'assembly à partir de la liste des champs/tables (pour ensuite les compiler en assembly), tu génères directement l'assembly en question.
    Oui, mais avec CodeDom tu génères aussi très bien sans passer par une phase sources (le seul objet CodeDom orienté réellement "injection de source" est le CodeSnippetExpression).

    EDIT : Ensuite je ne veux pas trop m'avancer (n'étant pas expert), mais je pense que la programmation orientée aspect est basée sur l'injection de code IL dans les assemblies. Donc ici, ça doit être utile aussi.
    Ok, ca en effet c'est possible (mais je n'y connais rien en AOP).

    Je ne réponds pas aux questions techniques par MP ! Le forum est là pour ça...


    Une réponse vous a aidé ? utiliser le bouton

    "L’ennui dans ce monde, c’est que les idiots sont sûrs d’eux et les gens sensés pleins de doutes". B. Russel

  6. #6
    Rédacteur
    Avatar de SaumonAgile
    Homme Profil pro
    Team leader
    Inscrit en
    Avril 2007
    Messages
    4 028
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Team leader
    Secteur : Conseil

    Informations forums :
    Inscription : Avril 2007
    Messages : 4 028
    Points : 6 334
    Points
    6 334
    Par défaut
    AFAIK, CodeDom manipule du code source, tandis que Reflection.Emit génère de l'IL, ça me semble assez important comme différence.

    Tu peux écrire un compilo avec Emit tandis que si tu essaies avec codedom, c'est un serpent qui se mord la queue.

    Donc je t'accorde le point sur la génération de DAL, c'est surement plus facile de le faire avec CodeDom (mais c'est possible de le faire avec Emit).

    En regardant dans la MSDN, il est précisé que Emit est principalement utilisé pour de la compilation.
    Besoin d'un MessageBox amélioré ? InformationBox pour .NET 1.1, 2.0, 3.0, 3.5, 4.0 sous license Apache 2.0.

    Bonnes pratiques pour les accès aux données
    Débogage efficace en .NET
    LINQ to Objects : l'envers du décor

    Mon profil LinkedIn - MCT - MCPD WinForms - MCTS Applications Distribuées - MCTS WCF - MCTS WCF 4.0 - MCTS SQL Server 2008, Database Development - Mon blog - Twitter

  7. #7
    Membre confirmé
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    547
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 547
    Points : 627
    Points
    627
    Par défaut
    @Bluedeep :

    Par exemple, un jour en te levant, tu te dis "Ca serait pratique, si on pouvait gerer toute la logique cross-thread d'une UI simplement, avec un Attribut par exemple" du genre :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
            [InvokableMethod]
            public virtual void FaisUnTruc(...)
            {
     
            }
    tu peux resoudre ceci assez facilement avec un pattern Proxy et un peu d'emit. Le principe etant de construire un type derivé de la Form initiale d'overrider toutes les methodes attributées et de leur coller un pattern d'invoke (if (InvokeRequired) {} etc ...) . Resultat, tu n'as plus à te soucier de tes methodes appelables entre thread. Bon bien sur, le BGW reduit ce besoin, et des framework de proxyages de types plutot performant existe deja (dont DynamicProxy de Project Castle).

    De maniere general, l'Emit, c'est royal pour faire du proxy runtime (donc ca marche aussi pour proxyer un type inconnu à la compilation genre un plugin). Et l'avantage par rapport à codedom, etant que l'Emit créé directement un assembly, pas besoin de passer au compilateur (qui doit etre un gouffre en perf).

    Apres, si tu veux voir plus en details ce qu'on peut faire avec de l'Emit, je te renvoie vers l'excellente serie d'articles (6 à ce jour) de Philip Laureano sur CodeProject, ca te donnera peut etre plus d'idées.

    Bon, bien sur, on ne s'en sert pas tous les jours, mais si tu as a t'en servir, c'est reellement extremement puissant.

    Edit : Le point aussi entre l'Emit et Codedom est que l'Emit est vraiment emmerdant à ecrire (c'est un langage à part entiere) et à debugger. Pour note d'ailleurs (si tu veux essayer), on peut debugger un assembly emité dans VS avec un fichier texte et deux-trois manip au moment de l'injection, et pour la verification de l'assembly, il existe un outil dans le framework (PEVerify) qui te donnera les erreurs IL.

  8. #8
    Inactif  
    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Janvier 2007
    Messages
    6 604
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France

    Informations professionnelles :
    Activité : Chef de projet NTIC

    Informations forums :
    Inscription : Janvier 2007
    Messages : 6 604
    Points : 13 314
    Points
    13 314
    Par défaut
    Citation Envoyé par SaumonAgile Voir le message
    AFAIK, CodeDom manipule du code source, tandis que Reflection.Emit génère de l'IL, ça me semble assez important comme différence.
    Pour être précis, CodeDom permet de générer du code source ou d'en utiliser.

    Tu peux écrire un compilo avec Emit tandis que si tu essaies avec codedom, c'est un serpent qui se mord la queue.
    Absolument mais c'est pour cela que j'ai écrit au dessus
    en dehors de l'écriture d'un compilo .Net,
    En regardant dans la MSDN, il est précisé que Emit est principalement utilisé pour de la compilation.
    Ok, ca répond finalement à ma question.

    Je ne réponds pas aux questions techniques par MP ! Le forum est là pour ça...


    Une réponse vous a aidé ? utiliser le bouton

    "L’ennui dans ce monde, c’est que les idiots sont sûrs d’eux et les gens sensés pleins de doutes". B. Russel

  9. #9
    Inactif  
    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Janvier 2007
    Messages
    6 604
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France

    Informations professionnelles :
    Activité : Chef de projet NTIC

    Informations forums :
    Inscription : Janvier 2007
    Messages : 6 604
    Points : 13 314
    Points
    13 314
    Par défaut
    Citation Envoyé par SirJulio Voir le message
    Bon, bien sur, on ne s'en sert pas tous les jours, mais si tu as a t'en servir, c'est reellement extremement puissant.
    Ok, merci pour ces infos

    Je ne réponds pas aux questions techniques par MP ! Le forum est là pour ça...


    Une réponse vous a aidé ? utiliser le bouton

    "L’ennui dans ce monde, c’est que les idiots sont sûrs d’eux et les gens sensés pleins de doutes". B. Russel

Discussions similaires

  1. Utilité d'un pointeur vers une fonction ?
    Par Nasky dans le forum C
    Réponses: 10
    Dernier message: 20/03/2010, 19h54
  2. [J2EE] Utilité de la J2EE de SUN ?
    Par PeteMitchell dans le forum Java EE
    Réponses: 4
    Dernier message: 14/05/2004, 10h29
  3. [LG]Utilité du type enuméré ?
    Par tarbala dans le forum Langage
    Réponses: 2
    Dernier message: 10/12/2003, 16h20
  4. Le BIOS et son utilité
    Par le mage tophinus dans le forum Assembleur
    Réponses: 75
    Dernier message: 21/11/2003, 15h37
  5. utilité du binaire et hexadecimaux?
    Par souris78 dans le forum C
    Réponses: 9
    Dernier message: 01/07/2003, 15h08

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