-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathoutils_sf.tex
68 lines (43 loc) · 9.37 KB
/
outils_sf.tex
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
\subsection{\asf}
\label{section:outils_sf}
\asf\footnote{\url{http://www.symfony-project.org/}} est le \afm\ \aphp\ dont l'initiateur est \apotencier, un des co-fondateurs de \asl. Dans un premier temps conservé en interne dans l'agence, il a finalement été distribué sous licence libre en octobre~2005. Depuis, une véritable communauté internationale s'est formée autour de cet outil. Au-delà des qualités techniques intrinsèques de \asf, on peut expliquer ce phénomène par le fait qu'un effort considérable a été fourni concernant l'écriture de documentation : d'abord rédigée en anglais, elle a ensuite été traduite en plusieurs langues. De plus, plusieurs livres techniques\footnote{Références bibliographiques : \cite{practicalsf} \cite{sfrefguide} \cite{cahierssf} \cite{moresf} \cite{thebook}} ont déjà été publiés, dont la plupart voient leur contenu accessible librement et de façon officielle sur \ainternet.
Les sections suivantes abordent successivement une présentation du con\-cept de \afm, du modèle \amvc, qui est utilisé de manière globale dans \asf, et enfin une énumération des différentes fonctionnalités de \asf.
\subsubsection{Le concept de \afm}
Un \afm\ est comparable à un squelette de programme, à compléter pour mettre en œuvre une application logicielle de façon partielle ou même dans sa totalité. Basé sur les principes de la programmation orientée objet, il se présente sous forme d'un ensemble de classes, abstraites pour certaines, qui prédéfinissent une architecture du programme à réaliser.
Les \afms\ ont l'avantage de faciliter le développement d'extensions, la factorisation de fonctionnalités communes, ou encore de favoriser l'interopérabilité des composants. Ils ajoutent des mécanismes nouveaux au-dessus d'un langage de programmation qui rendent le développement plus simple et plus fiable, assemblant des actions complexes dans des actions simplifiées. En outre, ils ajoutent aussi une ligne directrice à la structuration du code qui, connue par un grand nombre de développeurs, améliore de manière drastique la maintenance de l'application.
Toutefois, on peut reprocher aux \afms\ de demander un apprentissage supplémentaire au développeur, qui n'est pas toujours évident. Il faut garder à l'esprit que de tels outils, même structurants, peuvent toujours être mal utilisés et donc perdre de leur plus-value. Malgré ces arguments, l'émergence des \afms\ reste sans conteste considéré par l'ensemble des professionnels de l'informatique comme une avancée majeure.
Par ailleurs, l'utilisation de \afms\ dans le contexte du développement web est une approche relativement récente. En effet, pendant longtemps, les sites web ont été plutôt considérés comme des réalisations éphémères ne nécessitant ni une modélisation poussée ni une démarche de qualité et de maintenance. Parallèlement, la façon de développer une application web est en apparence assez exotique : il faut manipuler des entités spécifiques comme la session utilisateur, la requête et la réponse, la persistance des données (souvent effectuée via des requêtes à une base de données) est originale, et l'approche objet est moins évidente. Aussi, le retard dans l'utilisation de \afms\ web est amplifié par le fait que le développement web a pu capter une part importante de programmeurs amateurs qui, n'ayant pas suivi de véritable formation en informatique, ne sont pas au fait des méthodes du génie logiciel.
Le développement massif et toujours croissant d'\ainternet\ oblige les dif\-fé\-rents acteurs du marché à se positionner sur ce secteur. Ce phénomène est d'autant plus accentué par l'émergence récente et populaire du web~2.0\footnote{Référence bibliographique : \cite{webdeux}} dit \emph{social} ou encore du \acloud\footnote{Référence bibliographique : \cite{cloud}}. Plus que de simples pages, les applications web deviennent alors des systèmes d'information à part entière. Ainsi, aujourd'hui, on ressent vraiment le besoin de faire appel aux différentes méthodes du génie logiciel dans le domaine du développement web, et l'utilisation de \afm\ fait partie intégrante de l'ensemble des solutions.
\subsubsection{Le modèle \amvc}
L'utilisation de \asf\ incite fortement le développeur à respecter les bonnes pratiques du développement web. En effet, toute l'organisation du \afm\ se base sur le patron de conception\footnote{En informatique, un patron de conception est un concept de génie logiciel destiné à résoudre les problèmes récurrents suivant le paradigme objet.~\cite{designpattern}} Modèle-Vue-Contrôleur, plus connu sous l'acronyme \amvc. Le but de celui-ci est de séparer complètement les données et les
règles qui les gèrent de leur présentation. Il est alors possible de présenter les mêmes objets, comme par exemple une liste d'actualités, à la fois sous la forme d'une page classique (en \ahtml) et de flux de syndication (aux formats \arss\ et \aatom), le tout sans changer le code concernant la logique de récupération et d'organisation des données.
Pour que cette séparation soit possible, les objets stockés via la couche du modèle ne peuvent pas être conscients de la façon dont ils seront présentés. C'est la couche de la vue qui se chargera de les afficher. En outre, la vue ne présente que des données préparées à l'avance : c'est le contrôleur qui est chargé de récupérer les valeurs adéquates depuis la couche du modèle pour ensuite les transmettre à la vue. L'approche est illustrée dans la figure~\ref{figure:outils_sf_mvc}.
\begin{figure}
\centering
\includegraphics[scale=0.4]{outils_sf_mvc}
\caption{Interactions entre les trois niveaux du patron de conception \amvc}
\label{figure:outils_sf_mvc}
\end{figure}
Plus précisément, les trois paragraphes suivants décrivent comment les trois niveaux du \amvc\ s'organisent dans \asf.
\paragraph{Le modèle}
Il représente le comportement de l'application : traitements des données, interactions avec la base de données, etc. Il décrit les données manipulées par l'application et définit les méthodes d'accès. Son implémentation est fortement liée à l'\aorm\ utilisé.\footnote{Cf. section~\ref{section:outils_doctrine} concernant l'\aorm\ \adoctrine}
\paragraph{La vue}
Elle correspond à l'interface avec laquelle l'utilisateur interagit. Plusieurs vues peuvent afficher les informations d'un même modèle, et une même vue peut présenter plusieurs modèles. Via des fichiers appelés \atemplates, elle peut être conçue en \ahtml\ ou tout autre \og langage \fg\ de pré\-sen\-ta\-ti\-on. Elle n'effectue aucun traitement, se contentant d'afficher les résultats de ceux effectués par le modèle.
\paragraph{Le contrôleur}
Il prend en charge la gestion des événements de synchronisation pour mettre à jour la vue ou le modèle. Il n'effectue aucun traitement, ne modifie aucune donnée. Il analyse la requête du client, se contente d'appeler le modèle adéquat et de renvoyer la vue correspondant à la demande. Dans \asf, chaque requête voit sa logique localisée dans ce que l'on appelle une \og action \fg. Elle est accessible via une \og route \fg, qui correspond à l'adresse saisie par l'utilisateur dans son navigateur web.
\subsubsection{Fonctionnalités de \asf}
En plus de fournir une organisation respectant le modèle \amvc, le \afm\ \asf\ apporte les fonctionnalités suivantes :
\begin{itemize}
\item développé en \aphp~5, il est entièrement orienté objet, ce qui facilite la redéfinition de comportements de base ;
\item il structure le développement via une architecture modulaire, dont les niveaux sont l'application, le module et le \aplugin ;
\item il intègre au choix deux \aorms\footnote{Cf. section~\ref{section:outils_doctrine} concernant l'\aorm\ \adoctrine}, \adoctrine\ et \apropel ;
\item flexible, la structure de l'application et son modèle peuvent être modifiés rapidement grâce à un système de génération de code accessible via la ligne de commande ;
\item la configuration du site développé se fait via des fichiers au format \ayml\footnote{\ayml\ est un langage de sérialisation de données. Sa syntaxe est relativement simple et efficace, et a été établie de sorte à ce qu'elle soit la plus lisible possible par des humains.~\cite{yml}}, clairs et accessibles ;
\item il propose un système de \og routes \fg\ permettant de personnaliser à souhait les adresses des différentes pages du site ;
\item il dispose d'un système de gestion des formulaires permettant entre autres une validation sûre des données entrées ;
\item il fournit des facilités pour gérer la session de l'utilisateur, et offre des possibilités d'autorisation et de restriction d'accès basées sur un système de permissions ;
\item il possède un système de génération d'administration, dont le but est d'obtenir rapidement des interfaces d'administration de la base de don\-nées ;
\item il propose un système de cache\footnote{Par analogie avec la mémoire cache d'un ordinateur, un cache est un mécanisme mis en œuvre dans un logiciel afin de permettre une réutilisation rapide de données déjà traitées auparavant.~\cite{cache}} natif permettant d'économiser de la charge serveur ;
\item il peut gérer l'internationalisation de contenu via des fichiers de traduction ;
\item il prend en charge le déploiement d'applications d'un serveur à un autre via une interface en ligne de commande.
\end{itemize}