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 :

Problème d'architecture, définition des assemblys


Sujet :

C#

  1. #1
    Membre éclairé Avatar de WebPac
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    947
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 947
    Par défaut Problème d'architecture, définition des assemblys
    Bonjour tout le monde,

    je souhaite faire plusieurs applications qui pourront exporter dans un tableur, soit dans Excel soit dans OpenOffice.org.
    Il y aura au final, une suite pour Excel et une suite pour OpenOffice.org.
    Les 2 suites ont bien entendu tout le code métier en commun, seul le code de pilote des tableurs change.
    Ainsi, je désire créer une dll ExportExcell.dll et une dll ExportOOo.dll.
    Chacune de ses 2 dll possèdera le code spécifique associé au tableur lui correspond et les projets et autres dll métier n'auront aucun code spécique à tel ou tel tableur.
    Jusque là, rien de bizarre, juste une volonté de faire un code propre.

    Ainsi, la solution est de faire une interface Tableur avec 2 classes filles TableurExcel et TableurOOo, chacune des 2 filles se trouvant dans une des 2 dll et création des filles en utilisant un design pattern Fabrique abstraite.

    Mon soucis est que je ne sais pas où définir mon interface Tableur, en effet, si je souhaite la déclarer dans mon projet principal métier, il faudra que les dll puissent y avoir accès et ce n'est pas faisable car mon projet principal doit déjà pouvoir y accéder, de plus, je ne voudrais pas que les dll dépendent du code métier.

    Si je déclare l'interface Tableur dans une assembly séparée, ça me fait créer une dll qui ne possèdera qu'une déclaration d'une interface, je trouve que c'est un gaspillage pour pas grand chose et une complication de l'architecture.

    Quelle est la solution en général pour ce genre de problème d'architecture ?
    Je ne vois pas mais me dis que je ne suis pas le seul à me poser ce problème.

    Merci par avance pour vos suggestions.

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

    Informations professionnelles :
    Activité : Chef de projet NTIC

    Informations forums :
    Inscription : Janvier 2007
    Messages : 6 604
    Par défaut
    Citation Envoyé par WebPac Voir le message
    Si je déclare l'interface Tableur dans une assembly séparée, ça me fait créer une dll qui ne possèdera qu'une déclaration d'une interface, je trouve que c'est un gaspillage pour pas grand chose et une complication de l'architecture.
    C'est pourtant la solution la plus commode.
    On l'applique courament avec WCF, par exemple où le seul point commun entre le serveur et le client sont souvent les BO et les interfaces de communication.

    Je ne comprends pas la notion de "gaspillage" ici ? ca gaspille quoi ? 10 Ko sur le disque ?

  3. #3
    Membre éclairé Avatar de WebPac
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    947
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 947
    Par défaut
    Salut,

    en fait, non, "gaspillage" n'est pas un bon terme, c'est que je me dis que si je commence à créer des assembly pour des interfaces uniques, je vais me retrouver avec un nombre assez conséquent d'assembly au final.

    Mais de toute façon, je ne voyais pas d'autre solution, donc si c'est ainsi la bonne pratique, je valide et fais aussi ainsi.

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

    Informations professionnelles :
    Activité : Chef de projet NTIC

    Informations forums :
    Inscription : Janvier 2007
    Messages : 6 604
    Par défaut
    Citation Envoyé par WebPac Voir le message
    Salut,

    en fait, non, "gaspillage" n'est pas un bon terme, c'est que je me dis que si je commence à créer des assembly pour des interfaces uniques, je vais me retrouver avec un nombre assez conséquent d'assembly au final.si.
    Quelques dizaines d'assemblies dans une application c'est assez fréquent, tu sais.

    Une petite application, c'est souvent une dizaine d'assemblies.

  5. #5
    Membre éclairé
    Profil pro
    Inscrit en
    Février 2004
    Messages
    57
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France, Nord (Nord Pas de Calais)

    Informations forums :
    Inscription : Février 2004
    Messages : 57
    Par défaut
    salut,

    tu peux même aller plus loin.

    - tu peux étudier le chargement dynamique de DLL qui te permettra de rompre le lien d'implémentation.

    - faire une assembly permettant de switcher entre OpenOffice et Excel

    après il faut savoir si c'est vraiment nécessaire.

    parfois une bonne DLL avec une gestion de version correcte permet de faire des choses propres et efficaces.

    enjoy

  6. #6
    Membre éclairé Avatar de WebPac
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    947
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 947
    Par défaut
    Merci pour vos réponses, en fait, je suis nouveau en .NET avec un grosse expérience en Delphi, donc pas de dll mais un gros exécutable qui intègre tout.
    Je me pose des questions justement sur les problèmes de versionning des assemblys, si une classe mère se trouve dans une assembly et des classes filles dans d'autres assemblies, si on modifie la déclaration de la classe mère (ajout de propriétés, méthodes, changement de signature de méthodes) et qu'on n'a pas les même versions des assemblies, que se passe-t-il ?

    Peut-on vérifier à l'exécution que les versions sont bien les bonnes ?

  7. #7
    Membre éclairé
    Profil pro
    Inscrit en
    Février 2004
    Messages
    57
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France, Nord (Nord Pas de Calais)

    Informations forums :
    Inscription : Février 2004
    Messages : 57
    Par défaut
    salut,

    un projet utilise des "références" vers des assemblys externes ou internes (d'autres projets dans ta solution)

    quand tu compiles, le compilateur vérifie que tous les objets issus de tes références, sont compatibles avec le code du projet que tu compiles.

    donc tu n'a pas besoin de vérifier les versions des assemblys. VS le fait pour toi.

    dans ton exemple les classes filles seraient en erreurs.

    concernant le versioning tes projets utilise un fichier assembly.info, dans lequel il y'a le numéro de version.

    bon courage

  8. #8
    Membre éclairé Avatar de WebPac
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    947
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 947
    Par défaut
    Salut, sur le poste du developpeur, tout va bien car on ne lance les produits qu'à partir de VS (en tout cas dans 90% des cas), je me pose plutôt la question pour les postes utilisateurs. Il peuvent déplacer ou remplacer à la main des dll ou exe sans passer par setup pensant qu'un nouvel exe patchera un bug sans penser à remplacer toutes les dll.

    De façon plus générale, dans ma solution, j'ai plusieurs applications qui réutilisent des dll communes, il faudra qu'à terme, je fasse un setup qui permette la mise à jour des applications sans avoir à désinstaller au préalable les anciennes versions. Si l'utilisateur ne met pas à jour toutes les applications, il y aura forcément des problèmes de version entre certaines assemblies.

  9. #9
    Membre éclairé
    Profil pro
    Inscrit en
    Février 2004
    Messages
    57
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France, Nord (Nord Pas de Calais)

    Informations forums :
    Inscription : Février 2004
    Messages : 57
    Par défaut
    dans chacun de tes répertoires d'installation tu auras tes DLL de références, au besoin dans différentes version.

    sinon tu peux enregistrées tes DLL dans le GAC ; là tu sors la grosse artillerie...

  10. #10
    Membre éclairé Avatar de WebPac
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    947
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 947
    Par défaut
    Vu que les applications font parties de la même solution et qu'elle utilisent les même dll je compte les mettre dans le même répertoire d'installation afin de ne pas avoir à dupliquer les dll.

    Comment enregistrer les dll dans le GAC me permet de garantir les bonnes versions des dll ? Faudra-t-il que le setup se connecte au GAP pour vérifier les différentes dll ?

  11. #11
    Membre éclairé Avatar de WebPac
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    947
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 947
    Par défaut
    Je note comme [Résolu] car le sujet de départ a sa réponse et pour le reste, je suis en train de faire de la R&D sur la MSDN et pense qu'au final, je vais le gérer via le setup d'installion & vérifier les versions des assemblies au lancement des applications et demander des mises à jour si elle ne sont pas bonnes.

    Merci pour tout, ++

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

Discussions similaires

  1. Problème d'architecture sur des classes abstraites
    Par Walther Bishop dans le forum Langage
    Réponses: 2
    Dernier message: 02/10/2013, 11h26
  2. [XL-2003] Problème avec la définition des axes d'un ScatterMarkers avec OWC10
    Par ankoubzh dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 12/05/2009, 22h15
  3. Problème de mise à jour des assembly-> reflexion
    Par gdkenny dans le forum ASP.NET
    Réponses: 2
    Dernier message: 14/11/2007, 11h10
  4. [JSTL] Problème de définition des biblio des balises jstl.jar
    Par amine lahyani dans le forum Taglibs
    Réponses: 5
    Dernier message: 30/08/2006, 20h32
  5. [Système] Problème de définition des variables
    Par SLAM JACK dans le forum Langage
    Réponses: 6
    Dernier message: 29/03/2006, 19h53

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