L'Engouement pour l'Architecture MVC est récent, pourtant elle a été inventée il y a déjà 30 ans

Ces deux dernières années ont été marquées par l'émergence frénétique des frameworks de type MVC tels que PHP Symfony, Zend Framework ou ASP.NET MVC et pourtant ce pattern a été créé il y a déjà 30 ans de cela par un suédois au nom imprononçable de ... Trygve Reenskaug ! Il est intéressant de se plonger dans l'historique de sa conception par son inventeur car cela est franchement plus lumineux que la plupart des explications "modernes" qui mélangent allègrement concept et implémentation rendant difficile la comparaison et l'apprentissage lors du passage d'un langage à un autre alors qu'il s'agit fondamentalement de la même approche.

Je vous conseille donc d'aller lire dans les détails les archives de TR mais afin de vous faciliter la vie, je vais vous en faire un résumé le plus pertinent possible en traduisant de surcroît de l'anglais vers le français:

Tout d'abord le but global de ce modèle était de:

voir le même élément du modèle simultanément dans différents contextes et/ou de divers points de vues.

En anglais:

to see the same model element simultaneously in different contexts and/or from different viewpoints.

A l'origine le nom n'était pas MVC mais Thing-Model-View-Editor (Chose-Modèle-Vue-Editeur) avec les définitions suivantes:

Thing (Chose)

Quelque chose qui représente un intérêt pour l'utilisateur. Ce peut être une chose concrète, comme une maison ou un circuit intégré. Ce pourrait être une chose abstraite, comme une nouvelle idée ou des opinions à propos d'un rapport. Ce pourrait être quelque chose d'entier, comme un ordinateur, ou une partie, comme un élément de circuit.

En anglais:

Something that is of interest to the user. It could be concrete, like a house or an integrated circuit. It could be abstract, like a new idea or opinions about a paper. It could be a whole, like a computer, or a part, like a circuit element.

Model (Modèle)

Un modèle est une représentation concrète d'une abstraction sous la forme de données dans un système informatique.

En anglais:

A Model is an active representation of an abstraction in the form of data in a computing system.

View (Vue)

A tout modèle est rattaché une ou plusieurs vues, chaque vue étant capable de montrer une ou plusieurs représentations visuelles du modèle à l'écran ou sur un support matériel. Une vue est capable d'opérer des opérations sur le modèle qui sont logiquement associées à cette vue.

En anglais:

To any given Model there is attached one or more Views, each View being capable of showing one or more pictorial representations of the Model on the screen and on hardcopy. A View is also able to perform such operations upon the Model that is reasonabely associated with that View.

Editor (Editeur)

Un Editeur est une interface entre un utilisateur et une ou plusieurs vues. Il procure à l'utilisateur un moyen de commande adéquat, par exemple sous la forme de menus qui peuvent changer dynamiquement en fonction du context courant. Il procure aux vues la coordination nécessaires et les messages de commande.

Quelques mois plus tard à peine, l'acronyme a été revu ainsi que les définitions devenues plus générales:

Model (Modèle)

Les modèles représentent la connaissance. Un modèle peut être un simple objet ou cela peut être une structure d'objets.

Models represent knowledge. A model could be a single object, or it could be some structure of objects.

View (Vue)

Une vue est une représentation visuelle d'un modèle. Ce pourraît être ordinairement une projection sur certains attributs du modèle et l'occultation d'autres. Une Vue agit donc en tant que filtre de présentation.

En anglais:

A view is a (visual) representation of its model. It would ordinarily highlight certain attributes of the model and suppress others. It is thus acting as a presentation filter.

Controller (Controleur)

Un contrôleur est un lien entre un utilisateur et le système. Il procure à l'utilisateur des entrées en arrangeant les vues de manière adéquate pour les présenter elles-même aux endroits appropriés de l'écran. Il procure à l'utilisateur des sorties en présentant à l'utilisateur des menus ou tout autre moyen de donner des commandes ou des données.

En anglais:

A controller is the link between a user and the system. It provides the user with input by arranging for relevant views to present themselves in appropriate places on the screen. It provides means for user output by presenting the user with menus or other means of giving commands and data.

Editor (Editeur)

Certaines vues procurent un controleur spécial, un éditeur, qui permet à l'utilisateur de modifier les informations qui sont présentées par la vue.

En anglais:

Some views provide a special controller, an editor, that permits the user to modify the information that is presented by the view.

Pour le reste, c'est un peu long à traduire donc je vous laisserai faire l'effort. Cela concerne les relations entre les différentes parties:

View-Model

A view is attached to its model (or model part) and gets the data necessary for the presentation from the model by asking questions. It may also update the model by sending appropriate messages. All these questions and messages have to be in the terminology of the model, the view will therefore have to know the semantics of the attributes of the model it represents. (It may, for example, ask for the model’s identifier and expect an instance of Text, it may not assume that the model is of class Text.)

The View cashes model data in the screen buffer and/or in its private memory. These data need to be updated whenever the model changes. Let the View register with the Model as being a dependent of the Model, and let the Model send appropriate messages to its dependents whenever it changes. This is a special case of the Observer pattern.

Controller-View

The controller receives user output, translates it into the appropriate messages and pass these messages on to one or more of the views. A controller should never supplement the views, it should for example never connect the views of nodes by drawing arrows between them. Conversely, a view should never know about user input, such as mouse operations and keystrokes. It should always be possible to write a method in a controller that sends messages to views which exactly reproduce any sequence of user commands.

Leave a Reply


XHTML: You can use these tags: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>

Get Adobe Flash playerPlugin by wpburn.com wordpress themes