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 :

[Débutant C#] Class Library [Fait]


Sujet :

C#

  1. #1
    Membre du Club
    Profil pro
    Développeur Web
    Inscrit en
    Mai 2007
    Messages
    67
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mai 2007
    Messages : 67
    Points : 48
    Points
    48
    Par défaut [Débutant C#] Class Library
    Bonjour,

    Je suis totalement nouveau en C#, j'aurais besoin d'un coup de main sur un projet.

    J'ai une application principale, qui contient une interface graphique et un gestionnaire de "modules" (sous classes).
    Les modules sont regroupés en deux familles :
    • Générateur de fichier XML (chaque module génère différents types de XML)
    • Communication avec une application distante (chaque module utilise un média différent : laison série, bluetooth, ethernet...)

    Chaque famille dispose d'une interface regroupant les fonctions qui doivent être accessibles à l'application principale sans se soucier du module réellement utilisé. Exemple : pour la communication, il va exister une classe par média, mais chaque classe implémente la même interface (envoyerFichier(), recevoirFichier(), etc. pour faire simple).

    Ma question est : Comment organiser tout ça dans une solution sous Visual C# ?
    C'est à dire : Où doit se situer l'interface des modules ? Dois-je générer une "class library" par famille ou plutôt une par module ? Le principe étant de pouvoir choisir (via l'interface graphique ou automatiquement) au démarrage quel module va être utilisé parmi ceux disponibles pour remplir chacun des 2 rôles.

  2. #2
    Expert confirmé

    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Septembre 2006
    Messages
    3 580
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Chef de projet NTIC
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Septembre 2006
    Messages : 3 580
    Points : 5 195
    Points
    5 195
    Par défaut
    salut

    une architecture à base de plug-in me semble approprié

    Après, si tu considères que chaque module doit etre un plug-in, tu peux effectivement découpé chaque "plug-in" dans un projet... Ca sera surement le mieux

    PAr contre, je te conseille de mettre l'interface implémenté par chaque projet dans une classe librarie (projet) indépendant.. comme cela, ca evitera à l'appli principale de devoir référencer les modules et juste référencer le module définissant l'interface.. ET après, tu charges dynamiquement chaque plug-in
    The Monz, Toulouse
    Expertise dans la logistique et le développement pour
    plateforme .Net (Windows, Windows CE, Android)

  3. #3
    Membre du Club
    Profil pro
    Développeur Web
    Inscrit en
    Mai 2007
    Messages
    67
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mai 2007
    Messages : 67
    Points : 48
    Points
    48
    Par défaut
    Merci pour la rapidité !

    Je suis entièrement d'accord avec le principe de plug-ins.
    Maintenant, j'aurais besoin d'une ou deux précisions :
    • Quels vont être les fichiers résultants ? Je veux dire, une dll par plug-in ?
    • Je suis pas sûr de comprendre un point : je dois générer une "class library" qui ne contient que mon interface ? C'est possible ? Et chaque plug-in devra référencer le projet interface ?
    • Comment charge-t-on dynamiquement un plug-in en C# ?

    Merci d'avance...

  4. #4
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Points : 39 749
    Points
    39 749
    Par défaut
    Salut, je te conseille de jeter un oeil à ce tuto, qui décrit en détail l'architecture proposée par le framework 3.5 pour les add-ins

  5. #5
    Expert confirmé

    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Septembre 2006
    Messages
    3 580
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Chef de projet NTIC
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Septembre 2006
    Messages : 3 580
    Points : 5 195
    Points
    5 195
    Par défaut
    1 DLL par plug-in... oui sauf si tu veux mettre plusieurs plug-in dans une DLL mais ce n'est pas la philosophie normalement des plug-in

    2 Oui, Une DLL ne contenant que la déclaration de l'interface... et oui, chaque plug-in devra la référencer pour l'implémenter

    3 Le bout de code suivant devrait faire l'affaire
    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
     
    public static class Loader
        {
            public static object LoadPlugInFromDirectory(string dirname, string name)
            {
                object PlugIn = null;
                DirectoryInfo dirinfo = new DirectoryInfo(dirname);
                {
                    foreach(FileInfo info in dirinfo.GetFiles())
                    {
                        if(info.Extension == ".dll")
                        {
                            PlugIn = LoadPlugInFromDLL(info.FullName,name);
                            if (PlugIn != null)
                            {
                                break;
                            }
                        }
                    }
                }
                return PlugIn;
            }
     
            public static object LoadPlugInFromDLL(string dllName, string name)
            {
                object result = null;
     
                FileInfo info = new FileInfo(dllName);
                if (info.Exists)
                {
                    Assembly ass = Assembly.LoadFrom(info.FullName);
                    foreach (Type type in ass.GetTypes())
                    {
                        Type inter = type.GetInterface(name);
                        if (inter != null)
                        {
                            result = Activator.CreateInstance(type);
                            break;
                        }
                    }
                }
     
                return result;
            }
        }
    Grosso modo, tu passes un répertoire et un nom d'interface et il te retourne une instance de la première DLL qui implémente le nom de l'interface passé en paramètre

    Evidemment, faudra modifier ce code si tu veux avoir tous les plug-in dans un même répertoire....

    C'est juste un exemple rapide
    The Monz, Toulouse
    Expertise dans la logistique et le développement pour
    plateforme .Net (Windows, Windows CE, Android)

  6. #6
    Membre du Club
    Profil pro
    Développeur Web
    Inscrit en
    Mai 2007
    Messages
    67
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mai 2007
    Messages : 67
    Points : 48
    Points
    48
    Par défaut
    Merci à vous deux pour vos propositions ! Ça devrait beaucoup m'aider.

    Question subsidiaire (plus trop de rapport avec le sujet mais bon) : C'est possible de faire la même chose en C++ ?

  7. #7
    Expert confirmé

    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Septembre 2006
    Messages
    3 580
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Chef de projet NTIC
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Septembre 2006
    Messages : 3 580
    Points : 5 195
    Points
    5 195
    Par défaut
    salut

    oui c'est possible de la faire en C++ (non CLI, donc non managé)

    C'est juste un peu plus chiant et long à faire mais ça se fait puisque plein d'application sont en plug-in depuis des années en étant en C++.

    Mais perso, pour la vitesse de developpement, je ne fais plus que du C#.
    C++ reste pour moi un langage puissant et performant mais qui n'a "plus" de raison d'être pour développer une application purement pour Windows.

    Pour moi, Tout doit être C# sauf si :

    Interopérabilité avec des "vieilles" classes C++ (on peut wrapper avec C++/CLI pour migrer en douceur vers .Net)

    ou bien:
    Embarqué sur des calculateurs.

    ou bien:
    si portabilité demandé (alors , j'utiliserais les librairies QT ou java).

    Ya 10 ans, tu faisais une application windows en C++ avec les MFC mais tu pouvais la faire en C++ Win32 (sans les MFC)... maintenant, on a évoluer, donc C# s'impose comme "quasi" obligatoire pour une appli windows (pour la simple et bonne raison que tu vas 2 à 3 fois plus vite (si ce n'est plus) à développer la même application !!!
    The Monz, Toulouse
    Expertise dans la logistique et le développement pour
    plateforme .Net (Windows, Windows CE, Android)

  8. #8
    Membre du Club
    Profil pro
    Développeur Web
    Inscrit en
    Mai 2007
    Messages
    67
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mai 2007
    Messages : 67
    Points : 48
    Points
    48
    Par défaut
    C++ reste pour moi un langage puissant et performant mais qui n'a "plus" de raison d'être
    Ça risque de faire réagir des gens...

    Bon et bien merci pour votre promptitude !

  9. #9
    Expert confirmé

    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Septembre 2006
    Messages
    3 580
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Chef de projet NTIC
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Septembre 2006
    Messages : 3 580
    Points : 5 195
    Points
    5 195
    Par défaut
    Disons que C++ est encore utile


    Mais l'assembleur, c'est bien pratique encore dans certaines situations...
    The Monz, Toulouse
    Expertise dans la logistique et le développement pour
    plateforme .Net (Windows, Windows CE, Android)

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

Discussions similaires

  1. [Débutant] Accès simulink library browser
    Par korp69 dans le forum MATLAB
    Réponses: 1
    Dernier message: 15/12/2006, 16h27
  2. [CSS] Débutant : sous-classe pour balise
    Par jacquesprogram dans le forum Mise en page CSS
    Réponses: 1
    Dernier message: 15/09/2006, 14h13
  3. débutant cherche classe pour lire un wav simplement
    Par dimitrimm972 dans le forum SWT/JFace
    Réponses: 2
    Dernier message: 27/05/2006, 17h33
  4. Réponses: 5
    Dernier message: 05/05/2006, 18h07
  5. [Débutant] fichier .class pas trouvé par tomcat!!!
    Par oussam dans le forum Tomcat et TomEE
    Réponses: 2
    Dernier message: 03/03/2006, 15h31

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