Quelques questions sur le pattern MVC
Bonjour,
J'ai lu ce tutoriel afin de comprendre comment organiser mes classes en modèles, vues et contrôleurs. En essayant de mettre en place ce pattern, j'ai été confronté aux problèmes suivant:
J'ai une classe modèle qui possède une propriété collection que j'aimerai représenter d'une manière différente pour les besoin de l'interface. Lorsque cette propriété est modifié, un évènement est levé et le contrôleur averti, met à jour la propriété collection de la vue correspondante.
Jusqu'à la pas de problème, mais ma classe modèle possède aussi d'autres propriété que j'aimerais également afficher dans l'UI. Faut-il créer des propriété correspondante dans la vue ? Je suppose que oui car le binding ce fait sur la vue, mais cela implique que la vue contienne une référence au modèle et que chaque propriété de la vue renvoie la propriété correspondante du modèle et cela devient rapidement lourd à mettre en place...
Une autre solution serait de mapper (avec éventuellement un outil comme AutoMapper) les propriétés du modèle à celle de la vue au moment de la création de celle-ci par le contrôleur. L'avantage est que la vue n'a pas besoin de contenir une instance du modèle. L'inconvénient est qu'en settant les propriétés de la vue, le modèle n'est pas modifié.
Maintenant prenons ce cas simplifié.
Code:
1 2 3 4 5 6 7 8 9
|
public class Model1
{
public Model2 MyProperty {get; set;}
}
public class Model2
{
} |
Si je veux créer une vue pour le Model1, je dois également créer une vue pour le Model2 de cette manière
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13
|
public class View1
{
private Model1 model;
...
public View2 MyProperty {get; set;}
}
public class View2
{
private Model1 model;
...
} |
Comme les classe modèles sont plus ou moins toutes liés, je dois créer une vue pour chacune d'elle. Il devient alors très fastidieux de synchroniser les vues et les modèles. Et si ma classe View2 ne faisait finalement que renvoyer les propriétés de Model2, aurait-elle vraiment sa raison d'être ? Cela représenterait beaucoup de code pour pas grand chose...
Merci d'avance pour vos éclaircissements sur ces questions.