Framework mvc

Description

Le livrable Framework est constitué de trois dossiers :
 Le dossier de Source, contenant l’ensemble des fichiers sources du Framework et ceux des fichiers tests du Framework.
 Le dossier Api, contenant la documentation des fichiers sources et tests du Framework.
 Le dossier Exécutable contenant le Framework sur forme Jar et des fichiers Bat permettant d’exécuter les principaux fichiers de tests inclus directement dans le Framework.
NB : Le terme concept sera utilisé à la fois pour définir une classe d’implémentation, qu’une idée qui se veut générale.
Le dossier Source
Le dossier source, est l’ensemble des fichiers sources du Framework. Ce dossier est définie sur l’architecture précédemment proposées et expliquer en détail dans le fichier Readme.doc du livrable architecture. Nous vous conseillons de le lire pour pouvoir mieux vous guider dans la consultation des sources du Framework.
Faute de temps, les fichiers sources de test ont été largement commentés. Ces fichiers sources se trouvent dans le paquetage test sous l’arborescence de software (confère Readme.doc de la livrable architecture). Vous pouvez avoir une idée de cette documentation en consultant le dossier Api du livrable Framework. Mais nous ne serons trop vous conseillez de regarder le code source.
Le dossier Api
Le dossier Api contient l’ensemble des fichiers de documentation de chacun des concepts que le Framework mais à votre disposition, pour réaliser une application modulaire, à souhait, multilingue et maintenable par n’importe quel participant. Le développement avec ce Framework, ne nécessite pas une connaissance de l’implémentation d’un module, elle ne nécessite que la connaissance du nom du contrôleur, du nom des vues mises à disposition avec le module, du nom éventuel de la ressource gérant le multilinguisme du module, du nom du modèle du module et surtout la connaissance des concepts de base du Framework. Concepts expliqués en détails dans l’API.
Le dossier exécutable
Le dossier exécutable, contient le Framework dans sa version 1.0.1 stable. Cette librairie est déjà utilisable. Il existe trois autres fichiers qui permettent l’exécution des fichiers de test que nous avons jugés primordiale. Mais vous pouvez exécuter d’autres fichiers de test possédant la méthode main. Pour cela regarder dans le paquetage test, si un fichier de nom X vous intéresse et qu’il contient la fonction main revenait dans le dossier contenant la librairie de nom MVCFramework.jar. Ouvrez une invite de commande et tapez la commande suivante :
java -cp ./MVCFramework.jar cm.enterprise.software.test.startup.X
Nous partons du principe que vous avez déjà configurer les variables d’environnement de notre système de tel sorte qu’il connait où se trouve l’exécutable java.exe. Vous avez besoin d’au moins de la version 1.5. Il va s’en dire que cette librairie fonctionne aussi bien sur Windows, Linux que MacOs.
Les Concepts de Base
Si l’on forme le souhait de développer avec MVC Framework, nous devons nous poser les questions suivantes :
 Notre application peut elle être développée en plusieurs composants autonomes et par plusieurs tiers indépendants?
 Notre application est-elle une application multilingue ?
 Notre application est-elle polymorphe ?
 Notre application doit-elle permettre une maintenance évolutive et corrective aisée ?
Si a l’une de ces questions, on y répond par l’affirmative, alors MVC Framework peut être une solution à notre développement. A fin de répondre de façon efficient aux questions ci-dessus formulées, MVC Framework définies :
 Le concept de ressource, défini au travers des classes d’implémentations Parameter, Resource, MultilingualParameter, MultilingualResource, SuperMultilingualResource et Helper, qui seront définies ultérieurement.
 Le concept de modèle défini au travers des classes et interfaces d’implémentations suivantes: Event, Listener, Model et SuperModel.
 Le concept de contrôleur, implémenté au travers des classes: Controller et SuperController.
 Le concept de vue, implémenté au travers des classes : View et SuperView.
 Le concept de Module, implémenté au travers des classes Module et SuperModule.
Généralités sur les concepts de base.
 Le concept de ressource donne à une application, entre autre, la possibilité de manipuler des ressources internes et externes à l’application, la possibilité de définir des ressources avec des paramètres plurilingues, la possibilité d’avoir de ressources multilingues constituées à partir d’autres ressources multilingues, d’avoir des ressources définies à partir d’autres ressources. En somme ce concept donne à une application la possibilité d’utiliser plusieurs langues et de faire appel à des ressources internes comme externes.
 Le concept de modèle permettra à l’application de faire une distinction claire entre la couche métier et toute autre couche de l’application en développement. Nous pourrons avoir des modèles simples, ou des modèles composés à partir de modèles simples et/ou d’autres modèles composés.
 Le concept de contrôleur permettra l’encapsulation de la logique de communication entre la couche métier, représenté par le modèle, et la couche utilisateur, ici définie par la vue. Le but principal de ce concept est de permettre le contrôle d’un concept sans grande connaissance de sa couche métier ou de celle utilisatrice, ici nous faisons allusion aux interfaces hommes machines. Ce concept permettra le contrôle d’un modèle simple ou de plusieurs modèles existant en définissant un contrôle sur les contrôles de ces modèles existants (Notion de SuperController)
 Le concept de Vue, au travers de ce concept, et surtout du concept du contrôleur, il sera possible à l’application d’être polymorphe (de posséder plusieurs vues). Une vue pourra se définit simplement ou comme combinaison de plusieurs vues existantes.
 Le concept de Module : il vous permettra de déployer vos fonctionnalités développées avec MVC Framework, comme des composants autonomes présentant une interface de communication accessible à n’importe quelle application développée ou non avec MVC Framework .
Les concepts ci-dessus énoncés, et ci-dessous détaillés, vous permettront de réaliser par mal de chose, la seule limite sera votre imagination. Car ces concepts sont extensibles à souhait.
En exemple, nous pouvons définir les concepts à venir :
 Le concept de super événement, qui pourrait consister à lancer en une fois plusieurs événements.
 Le concept de super écouteur, qui pourrait permettre l’écoute en une fois d’un ensemble d’événements.
Et bien d’autres concepts selon le besoin.
Une fois que vous aurez implémenté tous ces concepts pour un module données vous n’aurez besoin que du contrôleur du modèle du module pour le gérer et changer de vues et de langues à souhait. A fin d’illustrer toutes ses possibilités nous avons créé un super modèle de test.
Le super modèle de test, se trouvant dans le paquetage, est défini à partir de deux sous modèles Mode11 et Model2, chacun de ces sous modèles définissant une ressource multilingue, deux vues et un contrôleur. Le super modèle définira donc une super ressource multilingue comme combinaison des sous ressources des ces deux sous modèles, deux super vues qui sont chacune combinaison des vues des ses sous modèles et un super contrôleur qui défini un contrôle à partir du contrôle de chacun de ses sous modèles. Trois fichiers de test, ceux se trouvant dans le dossier exécutable vous montre comme tout cela se fait.
Nous ne pouvons que vous conseillez de vous faire une idée en consultant le code source des fichiers de test se trouvant dans le paquetage test.
Le concept de Ressource
L’une des plus grandes difficultés, dans la construction d’applications, est la manipulation des ressources. Le Framework MVC permet, avec la définition d’une classe Helper, la création, la manipulation et l’accessibilité permanente des ressources. Pour se faire le Framework a défini, ce concept de ressource, en deux niveaux :
- Le concept de ressource classique qui permettra, au travers des classes Parameter et Resource, de doter votre application de ressources malléables.
 Le concept Parameter, de façon, générale permet la définition d’un paramètre de ressource à travers un couple nom de la ressource et valeur de la ressource.
 Le concept Resource qui est une spécification de Parameter, vous permettra de définir une ressource classique, non plus seulement comme un couple nom, valeur, tel que le concept Parameter le fait, mais encore plus comme un ensemble de ressources classiques pouvant être soit des couples nom, valeur, soit des ensemble de couples nom et valeur, soit les deux.
- Le concept de ressource multilingue est une spécification du concept de ressource classique. Il définit une ressource comme une ressource plurilinguisme. Pour ce faire le Framework définit par les concepts MultilingualParameter, MultilingualResource et SuperMultilingualResource.
 Le concept MultilingualParameter, qui est une spécification du concept Parameter. Il permet de définir des paramètres ou ressources définissant un couple nom et ensemble de valeurs selon la langue.
 Le concept MultilingualResource, qui est une spécification de Resource, qui vous permettra de définir des ressources multilingues comme un ensemble de paramètres multilingues, tel que définit par le concept MultilingualParameter.
 Le concept de SuperMultilingualResource, qui est une spécification du concept MultilingualResource. Il vous permettra de définir une ressource multilingue comme un ensemble de ressources multilingues, tel que définies par le concept MultilingualResource.
Le concept de Modèle
Ce concept est à la base, des concepts de contrôleur et de vue. Un modèle définit la couche métier d’une fonctionnalité ou d’un module que l’on souhaite définir à travers MVC Framework. A fin de vous permettre la définition aisée de votre couche métier, le Framework met à votre disposition les concepts suivants :
- Le concept Event : permettant de définir des événements qu’un modèle peut lancer.
- Le concept Listener : permettant de définir les différentes méthodes d’écoute des événements qu’un modèle peut lancer.
- Le concept Model : permettant la définition basique d’un modèle avec des fonctionnalités telles que l’ajout d’écouteurs de n’importe quel changement sur le modèle et la propagation d’un changement quelconque aux différents écouteurs.
- Le concept SuperModel : qui vous permettra de définir à partir d’autres modèles existants.
De façon générale, pour mieux appréhender l’utilisation de ce concept, il vous suffit de penser à cette phrase : Un modèle émet un ensemble d’événements qui peuvent être écoutés par des tiers. Une fois, ceci fait votre travail consistera à définir les événements dont le modèle a besoin pour se faire comprendre, de définir ces événements et les différentes méthodes d’écoutes de ces derniers. Ensuite il faudra vous décider si votre modèle est un modèle basique ou plus tôt un amalgame de modèles.
Attention: Ne vous obstinez pas à trouver des événements à un modèle si il n’en a pas. Par défaut tous les modèles émettent un événement implémenté par le concept AnyEvent, qui est une spécification d’Event. Ce concept permet à tous les modèles de lance un événement lorsque n’importe quel changement survient en leur sein.
Le concept de contrôleur
Ce concept, nous pouvons le dire, est la fierté de ce Framework. Au travers de lui il est possible de prendre pleinement le contrôle d’un modèle sans grande connaissance de son implémentation. Il permet la définition d’une courroie de transmission entre la vue et le modèle.
De façon général, ce concept, une fois le modèle à contrôler défini, permet de gérer les mises à jour du modèle défini, de lancer l’exécution des méthodes de ce dernier, d’instancier, de manipuler, de mettre à jour et de supprimer les vues du modèles définies comme contrôlable. Tout ceci sans plus avoir nécessité de faire un appel direct aux méthodes de construction et de manipulation classiques.
Tout se fait au travers du contrôleur qui encapsule toute cette complexité. Pour se faire le Framework définit deux concepts :
- Le concept Controller qui vous permettra de prendre possession d’un modèle classique, concept Model, et de ses vues qui peuvent être classique ou complexe comme nous le verrons dans les détails du concept vue.
- Le concept SuperController qui vous permettra de prendre possession d’un modèle complexe, concept SuperModel, et de ses vues classiques et/ou complexes. Le plus intéressant avec ce concept et qu’il vous permet de définir les différents contrôleurs des modèles définies dans le super modèle à contrôler. Ceci dans le but de vous permettre un control directe des sous modèles sans plus avoir à vous tracassez sur leur implémentation. Seul des connaissances superflues des sous modèles vous permettront de réutiliser toute leur possibilité à travers le concept de SuperController.
Le concept de Vue
Généralement, dans une application on peut vouloir mettre à disposition plusieurs vues, pour l’utilisateur. Mais très souvent la difficulté d’implémentation nous exaspère, en nous poussant à l’abandon. Avec MVC Framework, tout devient plus simple. Pour un modèle, vous pouvez définir plusieurs vues, en spécifiant juste à ces dernières quel est le contrôleur du dit modèle. Bien évidement MVC Framework, ne serait pas tout à fait intéressant, pour la définition des vues, sans le concept SuperView. Ce concept est une spécification du concept View. Il vous permettra, entre autre, de définir des vues par combinaison de vues existantes. Ce qui vous permettra une réutilisabilité des vues toute naïve. La seule chose, dont il est important, à notre humble avis, de ne pas oublier, ce que ce sont les vues qui implémentent les méthodes d’écoute des informations qu’un modèle met à disposition. Et pour se faire chaque vue doit s’enregistrer auprès du modèle en question. Ceci se fait automatique, mais avec votre participation dans l’implémentation d’une méthode dans le modèle.
Le concept de Module
Notre avis est le suivant, « Nul ne sert de développer une fonctionnalité non réutilisable par des tiers, avec ou non utilisation de MVC Framework». Dans cette optique, le Framework a été pourvu d’une interface de communication. Cette interface de communication, matérialisé par le concept Module, vous permettra de développer des composants réutilisables et paramétrables par des tiers utilisant ou non le Framework pour leur développement.
Il est important de vous dire que le concept de Module est inspiré grandement des concepts Helper et Resource. Il est une généralisation presque complète de tous les autres concepts, ceci dans le but de lui conférer cette autonomie. Module tout comme Helper sont des aides de manipulation des ressources pour une application donnée. Les différences notables et les plus importantes sont :
- Helper peut prendre en charge un ensemble de modules, ce que Module ne peut faire.
- Module est une ressource d’une application globale, alors que Helper est l’aide de camp par référence de l’application globale.
Tout comme tous les autres concepts SuperXXX, SuperModule permet de spécifier un peu plus le concept Module, en permettant à un module d’être défini a partir d’autres modules.

Les exemples du paquetage test, seront de bons guides.

Conclusion :


Remarque:
- Nous ne saurons vous conseillez, suffisamment, de consulter le code source. Dés que le besoin s’en fait, n’hésitez pas à entrer dans le code source ou à consulter l’api de développement, non seulement pour vous faire une idée de ce que le Framework offre, mais surtout pour mieux répondre aux interrogations que ne manquera pas de vous susciter cette documentation incomplète.
- L’homme étant imparfait, non point dans son essence, mais dans ce qu’il entreprend, son œuvre ne peut être qu’à son image. Donc il est fort probable que vous puissiez détecter des bugs ou des manquements à ce Framework. Nous vous serons reconnaissants de nous les faire parvenir.

Codes Sources

A voir également

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.