Pourquoi mettre en place un Framework ?
1. Introduction
De nos jours, le terme Framework technique ou Framework d’entreprise sont devenus populaires, cependant bon nombre de personne n’en comprennent pas les tenants et les aboutissants. Ce petit document va tenter de résumé ce que ces termes sous entendent, ce que ces deux type de Framework peuvent apporter.
2. Définition
2.1 Framework technique
Un Framework technique est un ensemble de librairies permettant de réaliser un ensemble de fonctionnalité n’ayant pas attraie à un métier particulier. Par exemple une librairie d’authentification au travers d’un LDAP Novell trouve sa place dans un tel Framework. Il est souvent composé de fonctionnalités développées de toutes pièces ainsi que de librairie récupérées tel quel sur internet.
2.2 Framework d’entreprise
Un Framework d’entreprise est quand à lui axé sur le métier de l’entreprise, il va en fait normaliser le moyen pour toutes les applications de l’entreprise d’utiliser une partie du métier de celle-ci. Par exemple une banque va placer dans un Framework d’entreprise la définition d’un compte bancaire et un service permettant de le manipuler. Ainsi toutes les applications de la banque pourront accéder aux informations du compte bancaire d’un client en utilisant ce Framework.
3. Avantage d’un Framework
Les Frameworks apportent de nombreux avantages :
Ø Standardisation du code
Le fait d’utiliser un Framework assure que tous les développeurs utiliseront la même API, en effet, reprenons l’exemple de notre banque, sans Framework probablement que chaque application aura sa propre méthode de récupération des informations d’un compte bancaire. Le nom de cette méthode peut être différent d’une application à une autre, mais la technologie sous jacente peut aussi être différentes (Accès direct à la base de données, utilisation d’un Web Service, …). Autant de possibilité qui font qu’utiliser une ressource sur deux projets nécessite un temps d’adaptation à chaque switch. Le Framework lui propose une seule méthode, les détails techniques étant laissé aux Frameworks, un développeur peut donc passer d’un projet à un autre sans avoir à s’adapter au code « technique » du projet et donc ce concentrer sur les traitements métier de l’application.
Ø Correction de bug pour l’ensemble des applications
En effet si toutes les applications accèdent à une seule méthode pour effectuer un traitement, si ce traitement ne fonctionne pas correctement ou doit être modifié, il suffit d’apporter les modifications au Framework. Ainsi toutes les applications utilisant le Framework seront modifiées en une seule fois.
Ø Modularité & flexibilité
Les bons Framework sont toujours architecturer pour permettre une grande souplesse, ils implémentent de nombreux patterns qui leur permettent d’apporter une finesse bien supérieure à celle d’une application classique, par exemple, les Frameworks apportant une librairie d’accès aux données implémentent souvent un ensemble de providers différents (ODBC, SQL Server, Oracle) le plus souvent avec un choix du provider à utiliser par le biais du fichier de configuration. Une application elle va se limiter au mieux à une classe abstraite dans la couche d’accès aux données évitant l’initialisation de la connexion, ou la gestion des erreurs.
Ø Productivité
Les Frameworks permettent un gain de productivité à long terme sur les équipes de développement, en effet une fois qu’un développeur à l’habitude d’utiliser le Framework, il peut passer d’un projet à un autre en un temps plus court. De plus comme chaque équipe n’a pas à recréer les classes techniques déjà présentes dans le Framework elle peut se concentrer sur les fonctionnalités propres à l’application.
Ø Optimisation
Il est plus simple d’apporter des optimisations sur le code d’un Framework que de placer ces optimisations dans l’ensemble des applications. Ce type de modifications étant souvent très couteuses, on rechigne à les faire sur une application, mais finalement lors que le Framework est optimisé cela profite à l’ensemble, ce qui réduit le cout pour chaque application.
4. Désavantage d’un Framework
Rare sont ceux qui le disent, mais un Framework n’est pas la solution magique qui convient à tous. En effet, les Frameworks comportent aussi leur lot de désavantage :
Ø Cout élevé
Le développement d’un Framework coute plus cher que le développement des fonctionnalités techniques équivalentes dans une application. En effet, un Framework doit prendre en compte l’ensemble des cas d’utilisation d’une fonctionnalité alors qu’une application n’implémentera que les cas d’utilisation lui étant propre.
Ø Niveau de complexité
Le fait de devoir penser à l’ensemble des cas d’utilisation et le fait de systématiquement penser de manière générique n’est pas donné à tous. De plus, le Framework résout souvent des problématiques complexes demandant une connaissance poussé de la technologie utilisée.
5. Quel choix faire ?
Au vu des deux chapitres précédents, je dirais qu’un Framework n’a pas sa place lorsqu’il est utilisé par un petit nombre d’applications, il prend tout son sens lors de la mise en place d’une standardisation dans une entreprise avec de nombreux projets en développement. Le type de Framework reste à définir selon les besoin de chacun, les sociétés de service choisiront d’implémenter un Framework technique alors que les grands groupes préféreront la mise en place de Framework d’entreprise (métier). Le choix est plus une question de contexte et de réutilisabilité d’un projet à l’autre.
6. Comment aller encore plus loin ?
La mise en place un Framework est un gain évident pour certains, mais un Framework seul ne peut pas assurer les gains de productivité nécessaire à la réussite des projets d’une entreprise. Il est possible d’optimiser encore plus le processus de développement pour les grandes entreprises.
6.1 Génération de code
La mise en place de modèles pour un générateur de code type SmartCode ou CodeSmith peuvent éviter au développeur les parties du code répétitives et rébarbatives. Par contre leur souplesse reste encore limitée, en effet un générateur de code va écrire vos classes d’accès aux données ou votre business model par rapport à une base de données, cependant il faudra souvent repasser derrière pour personnaliser le code.
6.2 GAT et GAX
Les outils « Guidance Automation Toolkit » et « Guidance Automation eXtensions » permettent de créer et d’utiliser des assistants pour Visual Studio. Par exemple, un assistant permettant de créer une solution structurée en couche avec l’ensemble des projets et les bonnes références dans chacun d’entre eux peut considérablement accélérer la mise en place d’un nouveau projet. Puis une série d’assistants peut vous permettre d’ajouter un projet dans la solution suivant la couche à laquelle il appartient. Enfin d’autres assistants peuvent vous permettre d’ajouter une classe ou une méthode dans celle-ci sans effort. Ces outils sont très efficaces, cependant ils ne sont toujours pas suffisants. Pour obtenir un environnement encore plus productif, il faudra mettre en place des DSL.
6.3 DSL
Les « Domain Specific Language » permettent d’ajouter dans Visual Studio 2005 un ensemble de designers supplémentaires, Comme le designer de classe de Visual Studio, ils peuvent être bi directionnels. Ils vous permettront une utilisation transparente de votre Framework, par exemple imaginons un DSL permettant de modéliser votre Business Model, chaque fois que vous ajouterai une entité à votre diagramme, un fichier source sera crée pour celle-ci, il contiendra une classe implémentant les bonnes interfaces et héritant d’une classe de votre Framework. Pour chaque propriété, il ajoutera le code nécessaire au DataBinding, etc. Ces outils sont très puissants, malheureusement leur conception n’est pas aisé et demande un temps considérables.
7. Conclusion
J’espère que suite à ce petit document, vous avez une vision plus clair des pré-requis à la mise en place d’un Framework ainsi que les possibilités en découlant. Un Framework n’est pas un chantier simple à mettre en œuvre et plus encore qu’une application nécessite une équipe de haut niveau. Trop souvent, j’ai vu des projets échoués à cause d’une démarche Framework non justifier ou mal gérée (autant en termes de moyen que de compétence). Il faut donc bien réfléchir avant de se lancer dans la démarche et une fois décidé se donner les moyens de réussir.
Juste un petit lien vers une serie d'images fort amusantes sur l'histoire d'une société (Microtrix) et de ces NDA :
http://www.istartedsomething.com/20070607/the-microtrix/
Je pense que mes ex camarades MVP y verront quelque chose :)
Viens d'apparaitre sur le portail CodePlex la première version d'un Guide sur TFS.
Voici la liste des chapitres :
Introduction
Ch 01 - Introducing the Team Environment
Ch 02 - Team Foundation Server Architecture
Ch 03 - Structuring Projects and Solutions
Ch 04 - Structuring Projects and Solutions in Team Foundation Server
Ch 05 - Defining Your Branching and Merging Strategy
Ch 06 - Managing Source Control Dependencies in Visual Studio Team System
Ch 07 - Team Build Explained
Ch 08 - Setting Up Continuous Integration with Team Build
Ch 09 - Setting Up Scheduled Builds with Team Build
Ch 10 - Large Project Considerations
Ch 11 - Project Management Explained
Ch 12 - Work Items Explained
Ch 13 – MSF Agile Projects
Ch 14 - Process Templates Explained
Ch 15 - Reporting Explained
Ch 16 - Team Foundation Server Deployment
Ch 17 - Providing Internet Access to Team Foundation Server
Vous pouvez le trouver à l'adresse suivante : http://www.codeplex.com/TFSGuide
Bonne lecture :)
On a toujours besoin a un moment ou a un autre de crypter des valeurs dans nos application (par exemple dans le fichier de configuration).
En général, je fais comme tout le monde, j'ouvre Google et lance une recherche, le petit souci c'est que de temps en temps (comme cette fois) je prends un code un peu vérollé. Pour une fois, j'ai donc décider de taper quelques lignes de code a la main pour effectuer le cryptage/décryptage d'un string dans un string :)
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 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 |
using System; using System.Collections.Generic; using System.Text; using System.IO; using System.Security.Cryptography; using System.Configuration;
namespace Technical.Utils { public static class Crypto { public static string Encrypt (string clearText, string password, bool useHashing) { byte[] key; byte[] dataToEncrypt = UTF8Encoding.UTF8.GetBytes(clearText);
if (useHashing || password.Length < 16) { MD5CryptoServiceProvider hashmd5 = null; try { hashmd5 = new MD5CryptoServiceProvider(); key = hashmd5.ComputeHash(UTF8Encoding.UTF8.GetBytes(password)); } finally { hashmd5.Clear(); } } else { key = UTF8Encoding.UTF8.GetBytes(password.Substring(0,16)); } TripleDESCryptoServiceProvider tdes = null; try { tdes = new TripleDESCryptoServiceProvider(); tdes.Key = key; tdes.Mode = CipherMode.ECB; tdes.Padding = PaddingMode.PKCS7;
ICryptoTransform cTransform = tdes.CreateEncryptor(); byte[] result = cTransform.TransformFinalBlock(dataToEncrypt, 0, dataToEncrypt.Length); return Convert.ToBase64String(result, 0, result.Length); } finally { tdes.Clear(); } } public static string Encrypt (string clearText, bool useHashing) { string pwd = ConfigurationManager.AppSettings["SecurityKey"]; return Encrypt (clearText, pwd, useHashing); }
public static string Decrypt (string encryptedText, string password, bool useHashing) { byte[] key; byte[] dataToDecrypt = Convert.FromBase64String(encryptedText);
if (useHashing || password.Length < 16) { MD5CryptoServiceProvider hashmd5 = null; try { hashmd5 = new MD5CryptoServiceProvider(); key = hashmd5.ComputeHash(UTF8Encoding.UTF8.GetBytes(password)); } finally { hashmd5.Clear(); } } else { key = UTF8Encoding.UTF8.GetBytes(password.Substring(0,16)); }
TripleDESCryptoServiceProvider tdes = null; try { tdes = new TripleDESCryptoServiceProvider(); tdes.Key = key; tdes.Mode = CipherMode.ECB; tdes.Padding = PaddingMode.PKCS7;
ICryptoTransform cTransform = tdes.CreateDecryptor(); byte[] result = cTransform.TransformFinalBlock(dataToDecrypt, 0, dataToDecrypt.Length); return UTF8Encoding.UTF8.GetString(result); } finally { tdes.Clear(); } }
public static string Decrypt (string encryptedText, bool useHashing) { string pwd = ConfigurationManager.AppSettings["SecurityKey"]; return Decrypt(encryptedText, pwd, useHashing); } } }
|
Voila rien de trés compliqué mais ca sert toujours :)
Vous trouverez en attachement un petit tools tout bète vous permettant de crypter/décrypter une chaîne vite fait
Voici un petit outil fort sympathique. Work Item Creator vous permet de créer/modifier vos Work Item, ainsi que les organiser hierachiquement.

Donc un outil a posseder absoluement.
Vous pouvez le télécharger sur le portail CodePlex : http://www.codeplex.com/wicreator/
La nouvelle est passée inaperçu, mais comme l'indique le titre, NHibernate 1.2 est disponible depuis cette semaine à cette adresse : http://sourceforge.net/project/showfiles.php?group_id=73818.
Au programme entre autre la gestion des generiques :)
Salut tout le monde,
Juste un petit mot pour vous avertir que TechHeadBrothers viens d'être mis à jour, au menu des nouveautés :
- Enregistrement d'utilisateurs
- Commentaires sur les articles
Le tout en Ajax
Alors tout le monde dit merci à Laurent pour ces heures de boulot pour notre plus grand plaisir 
Bon surf
Y a pas que nos PC dans la vie, donc apres une semaine de travail (acharné
) j'ai profité du soleil de ce week end pour aller prendre l'air au bord de l'etang de la fontaine, et pour mon plus grand plaisir, les belles carpes etaient au rendez-vous.

Conclusion: prenez le temps de prendre l'air 
Et voila, je viens d'avoir les résultats de ma certification Beta 'TS: Microsoft Team Foundation Server: Configuration and Development'.
Voila suite a mon petit post précédent, je me suis pencher sur le probleme de l'interception des mes appels à une couche metier pour y effectué des operations techniques. Aprés un rapide tour d'horizon sur le tout nouveau 'Policy Injection Application Block' des "Enterprises Library 3.0" (voir quelques post plus bas), j'ai rejeter cette belle brique qui m'obigerait a faire heriter mes classes de "MarshalByRefObject" (Tiens ca ressemble a du remoting), je me suis penchais sur le projet "Castle.DynamicProxy" qui est bien plus permissif. Le petit désavantage de ces Framework c'est la lourdeure de leur code :
IMyInterface proxy = (IMyInterface) new ProxyGenerator().CreateProxy( typeof(IMyInterface), new StandardInterceptor(), new MyInterfaceImpl() );
(Pas simple d'instancier un objet Proxifié)
Enfin, je me suis dis que comme mes objet metier étaient instanciés par une abstract factory, celle-ci pourrait se charger de proxifier l'object avant de le renvoyer.
Ce qui donne le nouveau source qui est attaché à se post.
En esperant que ceci peut vous aider.
Voila juste un petit source pour mettre en place le design patterns "abstract factory"
Yes, je viens de recevoir le resultat de la certif 70-542 "TS: Microsoft Office SharePoint Server 2007 - Application Development"
Voila une de plus ca fait 11 
Voila la beta 1 de Visual studio Orcas et de TFS Orcas est disponible.
Rendez-vous a l'adresse http://msdn2.microsoft.com/en-us/vstudio/aa700831.aspx
Bon download
Les enterprise Library sont sorties en version 3.0. Cette version est utilisable a partir du framefork 2.0 ou 3.0. Vous poiuvez la télécharger à cette adresse :
http://msdn2.microsoft.com/en-us/library/aa480453.aspx
Il faut noter l'apparition des Block :
- Validation
- Injection Policy
Hello All,
Voici un petit article sans pretention sur la création d'une brique de log (En attachement)
Bonne lecture
Et bien voila, cela fait bientot deux moi que j'ai perdu mon titre de MVP, en effet l'année précédente je ne me suis pas investi dans les communauté comme je l'aurais aimer, je viens donc de retirer un logo de ma sidebar 

Je remercie tout de meme tout ceux qui lors de cette belle aventure m'ont permis de grandir.
Rob Caron nous annonce sur son blog la sortie en beta de l'examen "TS: Visual Studio 2005 Team Foundation Server". Le programme a l'air sympa, alors faites comme moi profitez en c'est gratuit :)
http://blogs.msdn.com/robcaron/archive/2007/02/02/1584258.aspx
Bon chance...
Je viens de lancer les download des produits Office Server 2007 sur MSDN sont dispo :
- Project Server 2007 x86
- Forms Server 2007 x86
- Sharepoint Server 2007 Standard & Enterprise x86
- Sharepoint Server 2007 for Search Standard & Enterprise x86
- Groove Server 2007 x64 (pourquoi c'est le seul en x64 et pas dispo en version x86 ?)
Alors tous a vos Download :)
Les 10 derniers blogs postés
-
L'injection SQL n'est PAS un problème QUE pour les développeurs web ! par
CoqBlog le il y a 1 heure et 4 minutes
-
Un outil pour réaliser des animations WPF basées sur des équations de Bézier par
Perspective le il y a 4 heures et 27 minutes
-
Sandcastle et CodePlex : le verdict par
CoqBlog le il y a 5 heures et 19 minutes
-
ssdl view and TPH par
Matthieu MEZIL le il y a 7 heures et 0 minutes
-
Webcasts sur le Parallel Framework disponibles par
Matthieu MEZIL le il y a 8 heures et 46 minutes
-
[Silverlight] - Comprendre et Débuter avec Silverlight par
Danuz le il y a 13 heures et 31 minutes
-
SharePoint : Nouvel article sur l'exportation et Importation de sites SharePoint par
Blog Technique de Romelard Fabrice le 07-04-2008, 01:00
-
ImagineCup 2008 Final in Paris: Day 1 par
Richard Clark le 07-03-2008, 22:48
-
PowerShell : Comment utiliser un ENUM .NET dans un script PowerShell par
Blog Technique de Romelard Fabrice le 07-03-2008, 18:09
-
OU SONT LES VISITEURS DE MON SITE ? par
Nix's Blog le 07-03-2008, 15:07