|
Publicité ' | |||||||||||||||||||||||
|
|
#1 |
|
Invité régulier
![]() Inscription : juin 2004 Messages : 49 ![]() |
Bonjour,
J'ai deux classes (POCO) dans mon modèle définies de la manière suivante : Commande (int ID, DateTime date, List<LigneCommande> lignesCde, etc.) LigneCommande (int ID, int quantite, etc.). J'ai également défini les interfaces ICommande et ILigneCommande. Maintenant au niveau de ma présentation (ou de ma BLL ?), j'ai besoin de rajouter trois attributs (pour gérer l'état de l'objet) : bool estAjoute, bool estModifie, bool estSupprime au niveau de l'ensemble de mes objets du modèle (POCO). Comment faire cela ? 1. Créer une classe CommandePresentation (int ID, DateTime date, List<LigneCommandePresentation> lignesCde, etc.) ? Mais je vais être obligé de créer une nouvelle classe "Presentation" pour chaque classe du modèle et je vais être obligé de mapper mon objet Commande en CommandePresentation. 2. Créer un décorateur générique (GenericPresentation<T>) mais la problèmatique est la suivante : j'ai une List<LigneCommande> dans la classe Commande et elle ne sera pas "transformée" en LigneCommandePresentation. (j'espère que je suis clair sur cette explication). Donc comment gérez-vous cela ? Merci d'avance Luc |
|
|
00
|
|
|
#2 | ||
|
Membre éprouvé
![]() Inscription : janvier 2011 Messages : 161 ![]() |
Citation:
La plupart des outils de mapping objet relationnel gèrent déjà cela, est-voulu d'implémenter un change tracker maison ? Citation:
La question de devoir reconstituer ou pas toute une grappe d'objets côté présentation est pertinente, souvent on se contente d'avoir un petit graphe de DTO liés les uns aux autres et taillé exactement pour l'affichage à l'écran. Dans l'exemple des lignes de commande, on pourra avoir un DTO Commande relié à toutes ses lignes de commandes mais on va s'arrêter là. Par exemple si sur cet écran on n'affiche pas l'adresse de livraison, on ne va pas trimballer l'objet AdresseLivraison avec. Donc notre DTO Commande n'aura pas de propriété Adresse Livraison. Sur le mapping lui-même, avant de partir sur l'implémentation from scratch d'un décorateur ou mappeur générique, je regarderais si là aussi un framework n'existe pas (Automapper...) |
||
|
|
00
|
|
|
#3 | |||
|
Invité régulier
![]() Inscription : juin 2004 Messages : 49 ![]() |
Merci Luckyluke34 d'avoir pris le temps de me répondre.
Citation:
A ce moment là, j'utilise l'état de mes instances (estModifie, estSupprime, etc) pour savoir quel WS je dois appeler. Mais si tu as une autre idée que la gestion de ces "états" au niveau des instances de mon model, je suis preneur ! Citation:
Citation:
Si des personnes passant ici en connaissent, je suis preneur ! |
|||
|
|
00
|
|
|
#4 |
|
Membre éprouvé
![]() Inscription : janvier 2011 Messages : 161 ![]() |
J'essaierais d'explorer 3 pistes :
Tout cela afin d'éviter de surcharger les objets métier eux-mêmes avec des propriétés liées au change tracking. En effet en faisant cela on casse la persistence ignorance, on viole Single Responsibility Principle, etc. |
|
|
00
|
|
|
#5 | ||
|
Invité régulier
![]() Inscription : juin 2004 Messages : 49 ![]() |
Citation:
Si je comprends bien, le change tracking au niveau des outils ORM me permet d'avoir l'information si mon instance est nouvelle ou a été modifiée mais uniquement au niveau de ma couche DAL ou je me trompe ? J'ai de plus besoin de connaitre l'état de mon objet au niveau de ma BLL, pour savoir si je dois faire certains vérifications. Comment fait-on cela du coup ? Citation:
|
||
|
|
00
|
|
|
#6 | ||
|
Membre éprouvé
![]() Inscription : janvier 2011 Messages : 161 ![]() |
Citation:
Citation:
Dans ce cas-là, ça vaut peut-être le coup de garder les mêmes objets entre les différentes couches sans faire de DTO. A voir en fonction du type d'application (si la couche présentation et la couche métier sont sur des tiers différents, ça va être difficile). Autre solution : dans la couche présentation, se reposer entièrement sur les composants UI pour marquer l'état des éléments. Ex : dans une grille, pour marquer un élément édité d'une couleur particulière, se fier au fait que l'utilisateur ait modifié la ligne plutôt qu'à une propriété particulière de l'objet. Ca a l'avantage de ne pas devoir se trimballer plein de propriétés relatives à l'état dans chaque objet de la couche présentation. D'autant plus qu'il y a des chances pour que tous les états ne soient pas exploités dans l'UI (typiquement, un objet supprimé va juste disparaitre, on ne va pas le marquer d'une couleur particulière...) |
||
|
|
00
|
|
|
#7 | |
|
Invité régulier
![]() Inscription : juin 2004 Messages : 49 ![]() |
Citation:
Merci en tout cas Luckyluke34 !! |
|
|
|
00
|
Copyright © 2000-2013 - www.developpez.com