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 :

Optimisation code Plugin


Sujet :

C#

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2018
    Messages
    43
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Vendée (Pays de la Loire)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2018
    Messages : 43
    Par défaut Optimisation code Plugin
    Bonjour,
    Je me retrouve avec 2 version d'un code qui font plus ou moins la même chose. Pourriez-vous me dire lequel vous semble le plus intéressant à exploiter ?

    code 1 :

    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
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
     
    using PluginContract;
    using System;
    using System.Collections.Generic;
    using System.ComponentModel;
    using System.Data;
    using System.Drawing;
    using System.IO;
    using System.Linq;
    using System.Reflection;
    using System.Text;
    using System.Threading.Tasks;
    using System.Windows.Forms;
     
     
    namespace MyApp
    {
        public partial class Form1 : Form
        {
     
     
     
            object obj;
            AppDomain domain1 = AppDomain.CreateDomain("domain1");
            public object plugin1()
            {
     
     
                obj = domain1.CreateInstanceAndUnwrap("Plugin1", "Plugin1.Plugin1");
                return richTextBox1.Text += ((IPlugin)obj).Compter();
     
            }
     
            object obj2;
            AppDomain domain2 = AppDomain.CreateDomain("domain2");
     
     
            public object plugin2()
            {
     
     
                obj2 = domain2.CreateInstanceAndUnwrap("Plugin2", "Plugin2.Plugin2");
                return ((IPlugin)obj2).Compter();
            }
     
     
            AppDomain domain3 = AppDomain.CreateDomain("domain3");
            object obj3 ;
     
     
            public object plugin3()
            {
     
     
                obj3 = domain3.CreateInstanceAndUnwrap("Plugin3", "Plugin3.Plugin3");
                return ((IPlugin)obj3).Compter();
            }
     
     
     
     
            public Form1()
            {
                InitializeComponent();
     
            }
     
     
            private void button1_Click(object sender, EventArgs e)
            {
     
                plugin1();
     
            }
     
     
            private void button2_Click(object sender, EventArgs e)
            {
     
                richTextBox1.Text += plugin2();
     
     
            }
     
            private void button3_Click(object sender, EventArgs e)
            {
     
     
                richTextBox1.Text += plugin3();
     
     
     
            }
     
     
     
        }
     
    }
    code 2 :

    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
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
     
    using PluginContract;
    using System;
    using System.Collections.Generic;
    using System.ComponentModel;
    using System.Data;
    using System.Drawing;
    using System.IO;
    using System.Linq;
    using System.Reflection;
    using System.Text;
    using System.Threading.Tasks;
    using System.Windows.Forms;
     
     
    namespace MyApp
    {
        public partial class Form1 : Form
        {
            ICollection<IPlugin> plugins = PluginLoader.LoadPlugins("Plugins");
     
     
     
     
     
     
            public Form1()
            {
                InitializeComponent();
     
            }
     
     
            private void button1_Click(object sender, EventArgs e)
            {
     
     
                foreach(IPlugin item in plugins){
                    if(item.Nom()=="Plugin1"){
                        richTextBox1.Text += "Plugin : " + item.Nom() + "valeur : " + item.Compter();
                    }
                }
     
            }
     
     
            private void button2_Click(object sender, EventArgs e)
            {
     
     
                foreach (IPlugin item in plugins)
                {
                    if (item.Nom() == "Plugin2")
                    {
                        richTextBox1.Text += "Plugin : " + item.Nom() + "valeur : " + item.Compter();
                    }
                }
     
     
            }
     
            private void button3_Click(object sender, EventArgs e)
            {
     
     
                foreach (IPlugin item in plugins)
                {
                    if (item.Nom() == "Plugin3")
                    {
                        richTextBox1.Text += "Plugin : " + item.Nom() + "valeur : " + item.Compter();
                    }
                }
     
     
     
            }
     
     
     
        }
     
    }

    Merci d'avance !

  2. #2
    Membre Expert
    Homme Profil pro
    Développeur .Net / Delphi
    Inscrit en
    Juillet 2002
    Messages
    738
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Eure (Haute Normandie)

    Informations professionnelles :
    Activité : Développeur .Net / Delphi
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2002
    Messages : 738
    Par défaut
    Bonjour,

    Les deux codes me gènent un peu. Le principe d'un plugin et d'ajouter une ou des fonctionnalités à une application. L'application a priori ne connait pas le plugin mais uniquement son interface. Cela permet de faire un code générique qui fonctionne pour n'importe quel plugin qui implémente cette interface. Dans ton exemple, si un développeur ajoute un un plugin4, le code ne fonctionnera pas.

    Donc le test
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if(item.Nom()=="Plugin1")
    ne me semble pas être dans une logique de plugins.

    Pour reprendre ton exemple (qui est un cas d'école, c'est entendu) :
    - Tu crées une Listbox qui liste l'ensemble des plugins,
    - Tu crées un bouton qui ajoute au RichEdit les informations du plugin sélectionné par l'utilisateur.

    De cette façon, qu'il y ait 3 ou 10 plugins, le code fonctionne car à aucun moment tu n'as besoin de tester le nom du plugin en dur. De plus ton code sera plus propre car il y a pas mal de redondance dans tes exemples.

    Quant aux AppDomain, c'est une autre histoire. Pourquoi utiliser différents domaines d'application ?

  3. #3
    Membre Expert
    Homme Profil pro
    edi
    Inscrit en
    Juin 2007
    Messages
    941
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : edi

    Informations forums :
    Inscription : Juin 2007
    Messages : 941
    Par défaut
    Citation Envoyé par ebastien Voir le message
    Quant aux AppDomain, c'est une autre histoire. Pourquoi utiliser différents domaines d'application ?
    Ça peut se justifier si on veut isoler les plugins pour des questions de sécurité ou pour permettre la mise à jour individuelle "à chaud" de chaque plugin ; mais effectivement on n'en est peut-être pas encore là.

    Sinon pour une architecture en plugin il est possible de s'appuyer sur des systèmes prévus pour comme MEF (Managed Extensibility Framework => https://laedit.developpez.com/CSharp...gramming_Guide) ou PRISM (que je ne connais pas du tout par contre).

  4. #4
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2018
    Messages
    43
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Vendée (Pays de la Loire)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2018
    Messages : 43
    Par défaut
    Citation Envoyé par Noxen Voir le message
    il est possible de s'appuyer sur des systèmes prévus pour comme MEF .
    Merci de ta réponse, c'est effectivement ce que j'ai utilisé.

    ps : j'ai oublier de fermer la salle de discutions

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

Discussions similaires

  1. [VBA-E optimisation code] ameliorer la méthode pour cacher des lignes
    Par EvaristeGaloisBis dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 07/07/2008, 09h53
  2. Optimisation Code - Dernière ligne de la feuille
    Par Trust dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 04/07/2008, 12h25
  3. Optimisation code pour gagner en rapidité
    Par polodu84 dans le forum MATLAB
    Réponses: 2
    Dernier message: 05/03/2008, 15h32
  4. Réponses: 13
    Dernier message: 22/02/2008, 18h55
  5. Optimiser code VBA
    Par willytito dans le forum VBA Access
    Réponses: 5
    Dernier message: 19/11/2007, 09h49

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