MVC, la logique abstraite et la gestion des responsabilités : un exemple.

Une des premières choses sur laquelle Francis est revenu pendant la formation : les responsabilités de chacun des intervenants du pattern MVC. Principalement celle du Modèle par rapport à la logique abstraite.

Je reviens rapidement sur le pattern MVC, il s’agit simplement de séparer les responsabilités d’une application, d’un composant ou d’une partie quelconque d’une application ayant une partie graphique en trois objets : le Modèle, la Vue et le Contrôleur. Le Modèle est toujours la partie la plus difficile à appréhender alors qu'on comprend facilement que la Vue gère les éléments graphiques et le Contrôleur les actions déclenchées par l'utilisateur. En fait, le Modèle est en charge de toute la logique abstraite et non uniquement de la gestion des données comme je le pensais au départ. Le Modèle est bien plus qu'un simple réceptacle à données, à la limite il en gère peu d'ailleurs, déléguant cette gestion à d'autres classes et allant chercher dans celle-ci les infos nécessaires. La logique abstraite est donc l'unique responsabilité du Modèle.

Pour nous faire comprendre ce principe simple, Francis a utilisé un exemple que je m'empresse de reprendre ici : un simple menu.

Nous partirons par exemple d'un XML (mais ça pourrais être un tableau).

Un objet aura la responsabilité de charger et parser cette XML. Par exemple, et totalement au hasard, on pourra utiliser PixLib pour le charger et le déserializer. Une fois notre XML transformé en un objet, il sera passé au Modèle c'est le début de la logique abstraite.

Dans cet exemple, j'aurais une tendance à faire que le Modèle passe ce tableau à la Vue qui aurait parcouru le tableau pour créer les différents éléments en fonction des données. Mais la responsabilité de parcourir le tableau est attribuée au Modèle et il est absurde de le faire parcourir deux fois par deux objets différents. Donc notre Modèle va parcourir cet objet est va simplement à chaque itération lancer un événement écouter par la Vue et relié a une fonction du type addMenuItem(); par exemple.

Ainsi la logique abstraite est bien séparé de la gestion graphique et pourra inter changer nos Vue. L'idéal étant de créer une Interface pour les Vues qui voudront écouter ce Modèle.

Ca paraît logique ainsi dit mais j'ai eu souvent tendance à laisser de la logique abstraite dans les Vue et on tombe alors dans une problématique de couplage fort. Une partie de la logique abstraite étant dans la Vue, la relation entre la Vue et le Modèle devient plus lourdement dissociable. On perd donc de la souplesse.

Je ne sais pas si tout ça vous a aidé, mais moi ça m'a bien remis les idées en place.


Laissez un commentaire

(required)

(required)

Formatter votre commentaire

Les tags XHTML suivants sont utilisables:

<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>

Les URLs sont automatiquement converties.