J'ai du mal à comprendre le modèle MVC. Je comprends que nous essayons de découpler l'interface graphique de la logique métier, mais j'ai du mal à comprendre comment.
D'après ce que j'ai compris, le View
est ce que l'utilisateur voit. Il s'agit donc généralement de la fenêtre/du formulaire. Le site Controller
est entre les View
et le Model
. Le contrôleur fera en sorte que les données "circulent" dans les deux sens. Il va aussi faire persister l'état quand c'est nécessaire (si j'ai un assistant avec 5 étapes, c'est le Controller
C'est à lui qu'il incombe de veiller à ce qu'ils soient fabriqués dans le bon ordre, etc.) Le site Model,
est l'endroit où se trouve le cœur de la logique de mon application.
Ce point de vue est-il correct ?
Pour essayer de transformer cela en quelque chose de plus significatif, je vais essayer d'esquisser un exemple simple avec WinForms(pas d'ASP.NET ou de WPF, s'il vous plaît ! - pour les amateurs de Java, d'après ce que j'ai compris, Swing fonctionne de manière similaire à WinForms !), pour voir si j'ai bien compris, et je soulèverai les questions que je me pose toujours en le faisant.
Supposons que j'ai un modèle qui ne contient qu'une classe (juste pour faciliter les choses). Je sais que l'exemple aura l'air stupide mais c'est plus simple comme ça) :
class MyNumbers {
private IList<int> listOfNumbers = new List<int> { 1, 3, 5, 7, 9 };
public IList<int> GetNumbers() {
return new ReadOnlyCollection<int>(listOfNumbers);
}
}
Maintenant il est temps de faire mon Controller
:
class Controller
{
private MyNumbers myNumbers = new MyNumbers();
public IList<int> GetNumbers() {
return myNumbers.GetNumbers();
}
}
El View
devrait juste avoir un ListBox
qui a comme éléments tous les nombres récupérés en MyNumbers
.
Maintenant, la première question se pose :
Est-ce que le Controller
être responsable de la création MyNumbers
? Dans ce cas simple, je pense que c'est acceptable (comme l'a fait la Commission européenne). MyNumbers
fera exactement la même chose, quoi qu'il arrive, et n'a pas d'état associé). Mais supposons que je veuille utiliser pour tous les différents contrôleurs de mon application la même instance de MyNumbers
. Je devrais passer à ceci Controller
(et tous les autres qui en ont besoin) cette instance de MyNumbers
que je veux utiliser. Qui va être responsable de cela ? Dans cet exemple WinForms, est-ce que ce serait le View
? Ou serait-ce la classe qui crée le View
?
En retournant la question : quel est l'ordre d'instanciation de ces 3 parties ? Quel est le code que le "propriétaire" de la partie MVC
appelé à le créer ? Est-ce que le Controller
créer à la fois le View
y Model
? Est-ce que le View
instancier le Controller
et le Controller
le site Model
?
Deuxième question :
Comment le main
est censée ressembler, en supposant que je veuille que mon application ait uniquement la méthode Use Case
ce Controller
dépeint ?
Troisièmement :
Pourquoi, dans le diagramme MVC suivant, l'élément View
ont une flèche vers le Model
? Ne devrait-on pas Controller
être toujours le pont entre les deux View
y Model
?
J'aurai une ou deux autres questions, mais elles auront probablement plus de sens une fois que j'aurai compris ce premier détail. Ou peut-être qu'après avoir compris cette première question, toutes les autres s'effondreront.
Gracias.
2 votes
Bonne question - J'essaie toujours de comprendre la "bonne façon" de faire du MVC.
6 votes
En quoi cette question est-elle "subjective et argumentée" ? :boggle :
0 votes
Voici un exemple basé sur le schéma cité : stackoverflow.com/questions/3072979