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 :

Référence de dll dans une solution .NET


Sujet :

C#

  1. #1
    Membre averti
    Inscrit en
    Mai 2008
    Messages
    17
    Détails du profil
    Informations forums :
    Inscription : Mai 2008
    Messages : 17
    Par défaut Référence de dll dans une solution .NET
    Bonjour,

    J'ai un petit soucis. Je cherche à créer un mini framework qui gerera mes accées base. Pour cela j'ai plusieurs projets qui corresponde à mes couches :
    - Core.Data contenant les classes qui fera appel à une DAL static
    - Core.Business héritant des objets de Code.Data
    - Business contenant mes objets metiers et héritant de Core.Business

    Le systeme fonctionne. Mon soucis est que pour le moment Core.Business référence Core.Data et Business référence Core.Business et... Core.Data.
    Donc dès que je veux créer les IHM dans un projets metiers je suis obligé de référencé Core.Data et Core.Business pour pouvoir utilisé les objets metiers du Business. J'aimerai pouvoir supprimer ces références. Je pense qu'il faut passer par des interfaces mais je ne vois pas trop comment faire, si quelqu'un a une idée merci de me la donné .

  2. #2
    Membre éclairé
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Juin 2005
    Messages
    700
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Tourisme - Loisirs

    Informations forums :
    Inscription : Juin 2005
    Messages : 700
    Par défaut
    aurai tu un ptit diagramme à nous fournir? je ne suis pas sur de comprendre le shema de ton appli...

    Sinon

    je dirais pour tes classes Core.data et Core.Business de faire un clic droit dessus, puis refactoring puis extraire l'interface.
    ensuite tu place ces interfaces dans un nouveau projet librairie de classe

    Ainsi, désormais tes classes business et data dependent de cette dll

    Tu peux en plus de cela, placer dans ce nouveau projet un abstract Factory.

    Ainsi tout ce qui aurait besoin d'utiliser tes classes Core.Data et Core.Business aurait une reference vers ton nouveau projet uniquement, tu ne sera plus dépendant de Core.Data et Core.Business

  3. #3
    Membre averti
    Inscrit en
    Mai 2008
    Messages
    17
    Détails du profil
    Informations forums :
    Inscription : Mai 2008
    Messages : 17
    Par défaut
    Grosso modo on a :

    IHM --> classe metiers -héritage-> Core.Business -héritage-> Core.Data

    On retrouve le même shéma pour les listes.
    Je pense que tu as compris mon problème car j'aime bien ta solution et je vais ésséyé de la mettre en place.

    Merci beacoup

  4. #4
    Expert confirmé

    Avatar de Philippe Vialatte
    Homme Profil pro
    Architecte technique
    Inscrit en
    Juillet 2004
    Messages
    3 029
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Architecte technique
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Juillet 2004
    Messages : 3 029
    Par défaut
    Citation Envoyé par silvinus Voir le message
    IHM --> classe metiers -héritage-> Core.Business -héritage-> Core.Data
    Pourquoi fais-tu de l'héritage entre ces couches ?

    Que tes classes métiers *utilisent* tes classes de Core.Business qui *utilisent* Core.Data, ok, mais pourquoi l'héritage ?

    Mon Blog

    The Cake is still a lie !!!



    Vous voulez contribuer à la rubrique .NET ? Contactez-moi par MP.
    Vous voulez rédiger des articles pour la rubrique .NET ? Voici la procédure à suivre.

  5. #5
    Membre éclairé
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Juin 2005
    Messages
    700
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Tourisme - Loisirs

    Informations forums :
    Inscription : Juin 2005
    Messages : 700
    Par défaut
    je pense plutot que -> signifie "depend de"

    Que tes classes métiers *utilisent* tes classes de Core.Business qui *utilisent* Core.Data
    Je ne suis pas d'accord avec toi, d'ailleur silvinus dit lui meme que ca lui pose probleme.

    Tout ceci viole totalement le principe d'inversion des dépendances qui dit :

    1) Les modules de haut niveau doivent être modifiés lorsque les modules de bas niveau sont modifiés.
    2) Il n'est pas possible de réutiliser les modules de haut niveau indépendamment de ceux de bas niveau. En d'autres termes, il n'est pas possible de réutiliser la logique d'une application en dehors du contexte technique dans lequel elle a été développée.

  6. #6
    Expert confirmé

    Avatar de Philippe Vialatte
    Homme Profil pro
    Architecte technique
    Inscrit en
    Juillet 2004
    Messages
    3 029
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Architecte technique
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Juillet 2004
    Messages : 3 029
    Par défaut
    Citation Envoyé par giova_fr Voir le message
    Tout ceci viole totalement le principe d'inversion des dépendances
    Rien a voir avec ta citation, le DIP, c'est justement l'inverse

    Avoir un module de haut niveau qui hérites d'un module de bas niveau *est* une violation du DIP, vu qu'une modif sur ton module de bas niveau impacte le module de haut niveau

    Citation Envoyé par giova_fr Voir le message
    je pense plutot que -> signifie "depend de"
    Non, c'est marque noir sur blanc dans chacun de ces posts, c'est un héritage

    Ajouter une interface intermédiaire si on conserve l'héritage ne changera rien a son problème

    Mon Blog

    The Cake is still a lie !!!



    Vous voulez contribuer à la rubrique .NET ? Contactez-moi par MP.
    Vous voulez rédiger des articles pour la rubrique .NET ? Voici la procédure à suivre.

  7. #7
    Membre éclairé
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Juin 2005
    Messages
    700
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Tourisme - Loisirs

    Informations forums :
    Inscription : Juin 2005
    Messages : 700
    Par défaut
    dès que je veux créer les IHM dans un projets metiers je suis obligé de référencé Core.Data et Core.Business pour pouvoir utilisé les objets metiers du Business.
    J'y lis une totale violation du DIP.

    Ajouter une interface intermédiaire si on conserve l'héritage ne changera rien a son problème
    La je suis totalement d'accord avec toi.

  8. #8
    Expert confirmé

    Avatar de Philippe Vialatte
    Homme Profil pro
    Architecte technique
    Inscrit en
    Juillet 2004
    Messages
    3 029
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Architecte technique
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Juillet 2004
    Messages : 3 029
    Par défaut
    ah, tu parlais de sa situation initiale ?

    Oui, de toute façon, sa situation initiale viole a peu près tous les principes de SOLID

    SRP : parce que si toutes tes classes métier héritent de tes classes de DAL, elles se tapent les responsabilités de la DAL en plus
    LSP : je ne vois pas comment remplacer les objets métiers par des objets DAL
    ISP : euh...en fait, sans interface, il est pas viole, celui la

    La première chose a faire, c'est de commencer par casser cet héritage, qui n'as pas de raison logique

    Ah, oui, et pour ceux qui prennent la discussion en route (instant de pub...), les principes SOLID, c'est ca :
    http://philippe.developpez.com/articles/SOLIDdotNet/

    Mon Blog

    The Cake is still a lie !!!



    Vous voulez contribuer à la rubrique .NET ? Contactez-moi par MP.
    Vous voulez rédiger des articles pour la rubrique .NET ? Voici la procédure à suivre.

  9. #9
    Membre éclairé
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Juin 2005
    Messages
    700
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Tourisme - Loisirs

    Informations forums :
    Inscription : Juin 2005
    Messages : 700
    Par défaut
    oui je recommande vivement à tous de prendre connaissance de ceci, si vous ne savez pas structurez votre programme, si des qu'il prend de l'ampleur il devient impossible à maintenir, visqueux, fragile, difficile à faire évoluer : c'est que vous avez besoin d'aprendre les principes de SOLID.

    Je recommande egalement un excelent bouquin, ma bible de chevet :

    Agile Principles, Patterns and Practices in c# de Rober C.Martin, edition Prentice Hall.

  10. #10
    Membre averti
    Inscrit en
    Mai 2008
    Messages
    17
    Détails du profil
    Informations forums :
    Inscription : Mai 2008
    Messages : 17
    Par défaut
    je ne voulais pas entamer un débat . Je ne connais pas SOLID, je connais quelques principes que j'éssaie de mettre en place.
    Ma DAL est static Le core.Data se charge d'y faire appel et le Core.Business hérite de Core.Data tout comme la couche contenant les classes métiers hérite de Core.Business. Mon IHM référence les 3 projets. Mon but était de ne référencé que la couche contenant mes objets metiers.
    Merci pour toute ces info je vais m'instruire...

  11. #11
    Membre averti
    Inscrit en
    Mai 2008
    Messages
    17
    Détails du profil
    Informations forums :
    Inscription : Mai 2008
    Messages : 17
    Par défaut
    Une dernière chose pour répondre à la question : Pourquoi l'héritage?
    Parceque les classes contenus dans Core.Data (qui sont les classes de base de mes objets metier) on besoin de l'héritage pour la réfléction.
    En fait dans Core.Data il a la classe DataTable cette dernière possède entre autre la méthode Load(DataTable poObject). Cette méthode appel la DAL et s'envoie. Grace à ca la DAL connais l'objet a charger et par réflection génère la requète Select. C'est pratique en fait. Sans l'héritage et juste avec une interface je suis obligé d'implémenter ma méthode Load() dans chacun de mes objets metiers?

  12. #12
    Membre émérite Avatar de ctxnop
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2007
    Messages
    858
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Morbihan (Bretagne)

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

    Informations forums :
    Inscription : Juillet 2007
    Messages : 858
    Par défaut
    Citation Envoyé par Philippe Vialatte Voir le message
    Ah, oui, et pour ceux qui prennent la discussion en route (instant de pub...), les principes SOLID, c'est ca :
    http://philippe.developpez.com/articles/SOLIDdotNet/
    Très intéressant tout ca. Bon après je pense qu'il faut aussi peser le pour et le contre car tout ces principes sont contraignant. La contrainte apportée est parfois plus important que le gain de robustesse/flexibilité qu'ils apportent. Mais c'est sur que dans l'absolut c'est très intéressant de les connaitre et savoir les appliquer. Merci pour ce joli lien.

  13. #13
    Expert confirmé

    Avatar de Philippe Vialatte
    Homme Profil pro
    Architecte technique
    Inscrit en
    Juillet 2004
    Messages
    3 029
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Architecte technique
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Juillet 2004
    Messages : 3 029
    Par défaut
    @silvinus:

    ce que tu decris, c'est plus ou moins un pattern activerecord -> ton objet metier dispose d'une methode qui va recuperer les donnees en base.

    Si ton objet métier a la responsabilité de récupérer ses données en base, et de se sauvegarder, tu ne vas pas échapper a des problemes de "melange" entre tes couches

    Si tu veux découper un peu tes couches, tu peux essayer de faire un genre de repository, et de l'appeler a partir de classes dont le role sera de gerer la recuperation/sauvegarde des objets metiers depuis la bdd...

    Genre, pour des produits, tu fais un productmanager (ou productfactory), qui va avoir une methode GetOneProduct, qui va appeler ton repository, qui lui va faire de la reflexion...

    qq chose comme :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    public Product GetOneProduct(int productId){
      return  _repository.GetOne<Product>(productId);
    }
    Et la methode GetOne<T> te fais un coup de reflexion pour determiner les differents accesseurs pour la generation de la requete....ca doit "a peu pres" correspondre a ce que tu fais deja, mais avec la factory en intermediaire

    Perso, plutot que de m'embeter, je prendrais un ORM existant (de Subsonic a NHibernate en passant par EF, tu as le choix) qui te gerera tout ca touit seul comme un grand, avec des choses auxquelles tu n'as pas encore pense, et en plus avec certainement moins de bugs que ce que tu pourras faire (en tout cas, perso, c'est le choix que j'ai fait )

    Mon Blog

    The Cake is still a lie !!!



    Vous voulez contribuer à la rubrique .NET ? Contactez-moi par MP.
    Vous voulez rédiger des articles pour la rubrique .NET ? Voici la procédure à suivre.

  14. #14
    Membre averti
    Inscrit en
    Mai 2008
    Messages
    17
    Détails du profil
    Informations forums :
    Inscription : Mai 2008
    Messages : 17
    Par défaut
    Ok je te remercie pour toutes ces informations. Il est vrai que je n'ai pas pensé à passer par des choses éxistantes, c'est un tort. Je vais regarder les ORM qui se font. Mais aussi faire quelques Factory histoire de voire comment ca se passe.
    En tout merci pour tout, et pour le temps que t'as passé à me répondre. J'apprécie.

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

Discussions similaires

  1. Réponses: 2
    Dernier message: 25/03/2009, 10h51
  2. Réponses: 15
    Dernier message: 27/09/2006, 11h46
  3. Réponses: 1
    Dernier message: 02/05/2006, 10h50
  4. Réponses: 9
    Dernier message: 06/04/2006, 18h40

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