<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Decrypt &#187; Organisation</title>
	<atom:link href="http://decrypt.ysance.com/category/organisation/feed/" rel="self" type="application/rss+xml" />
	<link>http://decrypt.ysance.com</link>
	<description>Le site de decryptage des technologies de l&#039;informatique</description>
	<lastBuildDate>Thu, 01 Jul 2010 14:41:53 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.8.4</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Structuration projet évolutif</title>
		<link>http://decrypt.ysance.com/2009/06/structuration-organisation-projet-evolutif/</link>
		<comments>http://decrypt.ysance.com/2009/06/structuration-organisation-projet-evolutif/#comments</comments>
		<pubDate>Tue, 30 Jun 2009 15:39:37 +0000</pubDate>
		<dc:creator>Frédéric Faure</dc:creator>
				<category><![CDATA[Organisation]]></category>
		<category><![CDATA[ANT]]></category>
		<category><![CDATA[Automatisation]]></category>

		<guid isPermaLink="false">http://decrypt.ysance.com/?p=308</guid>
		<description><![CDATA[Comment structurer un projet de manière évolutive, surtout si ce projet propose plusieurs accès/modules (un Front et un Back Office par exemple), utilise un outil d’un éditeur lui-même soumis à ses propres changements de version, un framework et éventuellement gère du contenu ? C'est-à-dire comment faire en sorte que le projet soit maintenable au fil du temps et puisse profiter des dernières améliorations de chaque composant sans avoir à payer de monstrueux surcoûts.

La clé est d’organiser le projet de façon modulaire en évaluant correctement les différentes briques fonctionnelles et techniques du projet à mettre en place.

Nous prendrons dans notre exemple le cas d’un projet développé sous Eclipse et dont le serveur d’application cible est Tomcat. Tout autre technologie est bien sûr envisageable.

[...]]]></description>
			<content:encoded><![CDATA[<p>Comment structurer un projet de manière évolutive, surtout si ce projet propose plusieurs accès/modules (un Front et un Back Office par exemple), utilise un outil d’un éditeur lui-même soumis à ses propres changements de version, un framework et éventuellement gère du contenu ? C&#8217;est-à-dire comment faire en sorte que le projet soit maintenable au fil du temps et puisse profiter des dernières améliorations de chaque composant sans avoir à payer de monstrueux surcoûts.</p>
<p>La clé est d’organiser le projet de façon modulaire en évaluant correctement les différentes briques fonctionnelles et techniques du projet à mettre en place.</p>
<p>Nous prendrons dans notre exemple le cas d’un projet développé sous Eclipse et dont le serveur d’application cible est Tomcat. Tout autre technologie est bien sûr envisageable.</p>
<p><strong><em>Le découpage des sources</em></strong><br />
Tout d’abord il conviendra d’effectuer un découpage fonctionnel des différents modules ou accès de l’application. Nous pouvons prendre le cas d’un projet proposant un Back Office et un Front Office. Chaque module fonctionnel sera déclaré comme un projet à part entière et consommera des fonctionnalités, méthodes et outils communs présents dans un autre projet contenant le framework maison ou tronc commun. Outre une maintenabilité accrue pour l’ensemble du projet par la suite, cela permet de séparer clairement les éléments nécessaires à la compilation et exécution de chaque modules qui pourront s’exécuter sur des environnements/serveurs distincts. En effet, sur un site commerçant par exemple, le Back Office nécessitera probablement une infrastructure minimale afin de remplir les produits qui seront accessibles au grand public sur le Front Office qui pourra nécessiter une infrastructure plus poussée afin de supporter la charge, avec un système de réplication de données master-slave par exemple. Il faut donc que chaque module soit indépendant afin de pouvoir être déployés séparément sur des infrastructures distinctes.</p>
<p>L’intérêt d’avoir un projet à part pour le tronc commun permet en plus d’effectuer des montées de versions rapides pour peu que les méthodes et interfaces dudit framework maison aient été convenablement définies et ne bougent pas ou bien que la rétrocompatibilité soit assurée de manière générale. Cela permet d’avoir une version ISO du framework entre les différents projets (pas au sens Eclipse du terme mais au sens « business ») de la société et que chacun puisse profiter des dernières corrections et évolutions du framework maison.</p>
<p>Concernant les framework du marché, la séparation n’est pas aussi simple puisque, plus qu’un ensemble de méthodes et d’outils, ils proposent des modèles de développement, et donc qu’en général, les sources sont intégrées directement dans leur modèle, comme dans Struts pour ne citer que lui. Il n’est donc pas nécessaire de vouloir extraire dans des projets séparés tous les framework, car cela ne serait pas forcément bénéfique.</p>
<p><strong><em>Le cas des outils éditeurs</em></strong><br />
Reste en suite le cas des outils éditeurs, par exemple, qui bien souvent se retrouvent modifiés directement dans leur code source (quand les sources sont disponibles) rendant ainsi toute montée de version insurmontable. Le but de le mettre dans un projet à part est le même que pour le framework, c&#8217;est-à-dire de pouvoir profiter des évolutions/corrections du produit proposées par l’éditeur en gardant la possibilité de changer simplement de version. Cette simplicité est accrue avec les qualité des interfaces que doit proposer le tronc commun pour accéder au produit. En effet, lors d’une montée de version, si quelques méthodes de l’outil ont changé, il suffira de mettre jour l’interface du tronc commun correspondante sans avoir à modifier un seul élément du Front ou du Back office.</p>
<p>Si il s’avère que des modifications sont nécessaires afin d’apporter quelques spécificités au produit, il faudra le faire dans un projet à part, en conservant la même logique arborescente que le produit lui-même. Les modifications seront fusionnées avec la version originale de l’outil lors de la phase de génération de la cible via le moteur d’automatisation des tâches.</p>
<p><strong><em>Le contenu</em></strong><br />
Certains développements ont pour but de présenter du contenu. On peut prendre le cas d’un projet se basant sur un outil éditeur de type CMS (Content Management Systems ou Système de Gestion de Contenu). Du contenu sera nécessaire lors de la phase de développement. Cependant, le contenu doit se trouver impérativement dans un projet à part :</p>
<p style="padding-left: 30px;">- pour identifier aisément les ressources « statiques » du site et les « dynamiques » correspondant au contenu,</p>
<p style="padding-left: 30px;">- pour éviter lors des livraisons dans l’environnement de PROD d’embarquer des éléments de type contenu et d’écraser les modifications effectuées via le Back Office par les responsables du contenu (je suis sûr que si vous avez déjà travaillé sur un projet de CMS vous avez déjà vu ça… Hein !),</p>
<p style="padding-left: 30px;">- pour ne pas mettre 3 heures à rapatrier votre projet de SVN/CVS (gestionnaire de sources) alors que vous ne vouliez récupérer que les fichiers sources du développement et que vous vous retrouvez avec 1Go de contenu en prime !</p>
<p><strong><em>La compilation et l’exécution</em></strong><br />
La compilation des sources est assurées grâce aux dépendances que l’on peut appliquer entre projets. Il n’est donc pas nécessaire de tout mettre dans le même projet pour que cela compile ! ;ob Il faut cependant faire attention aux dépendances cycliques : bien que le compilateur refusera par défaut, il est toujours possible de désactiver certaines barrières, … Il est indispensable de ne pas en avoir car au-delà du fait que l’exécution ne sera pas possible sur l’environnement cible (rien que ça) à moins de tout poser au même endroit, cela signifie qu’il y a un problème de conception. Il n’y a pas de dépendance cyclique des projets si ils suivent une logique de couches correcte.</p>
<p>Concernant l’exécution, elle sera permise grâce à une tâche <a href="http://ant.apache.org/" title="Site de ANT">ANT</a> qui va récupérer les compilés et ressources de chaque projet afin de les mettre à disposition dans un répertoire cible :</p>
<p style="padding-left: 30px;">- répertoire du plugin Eclipse-Tomcat pour l’exécution en mode « débug »,</p>
<p style="padding-left: 30px;">- version livrable sous forme de « war » pour plateformes d’INT, de PROD, …</p>
<p style="padding-left: 30px;">- …</p>
<p>ANT est un scripteur de tâches permettant un ensemble complet de fonctionnalités (compilation, génération de Javadoc, archivage (zip, war, …), extraction CVS/SVN, …). Issu d’un projet Open source de la fondation Apache, il permet l’automatisation et donc la fiabilisation lors de la reproduction d’opérations répétitives tout au long du cycle de développement. Il sera alors possible de créer un ensemble de tâches ANT qu’il suffira d’exécuter : « Livraison DEV », « Livraison PRE-PROD », « Livraison PROD », …</p>
<p>ANT est capable également de se connecter à SVN et de générer les livrables à partir d’une version par exemple, une version des sources devant normalement être générée avant chaque livraison.</p>
<p>Si il est nécessaire d’avoir à disposition un ensemble de données d’initialisation du CMS pour le développement, un projet spécifique de contenu doit être créé et intégré via ANT lors de la génération du « build » dans la target « Livraison DEV ».</p>
<p><strong><em>Illustration</em></strong></p>
<div id="attachment_327" class="wp-caption alignnone" style="width: 490px"><img class="size-full wp-image-327" title="Structuration-Organisation Projet" src="http://decrypt.ysance.com/wp-content/uploads/2009/06/structuration-organisation-projet.png" alt="Structuration-Organisation Projet" width="480" height="360" /><p class="wp-caption-text">Structuration-Organisation Projet</p></div>
<p><strong><em> </em></strong></p>
<p><strong><em>Conclusion</em></strong><br />
L’organisation d’un projet au niveau des sources est indispensable car c’est ce qui va vous permettre d’assurer une maintenabilité et une évolutivité de vos développements, vis-à-vis également des éventuelles montées de version des composants communs ou éditeurs sous-tendant votre projet.</p>
<p>De plus un moteur d’automatisation des tâches de développement est indispensable quelque soit la taille du projet afin de permettre une reproductibilité des tâches, d’assurer une capitalisation des connaissances via ces scripts et également de soutenir l’organisation projet des équipes en permettant, par exemple, à n’importe qui d’effectuer une livraison, et ce rapidement.</p>
<p>L’investissement au niveau de la conception est une économie au niveau du projet dans sa globalité.</p>
<p><em><strong>Frédéric FAURE</strong></em></p>
]]></content:encoded>
			<wfw:commentRss>http://decrypt.ysance.com/2009/06/structuration-organisation-projet-evolutif/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
	</channel>
</rss>
