Bienvenue à Blogs CodeS-SourceS Identification | Inscription | Aide

CrazyHT Blog

Ex-MVP C#.NET
Team System Web Access Power Tool Available!

Comme l'annonce bharry sur son blog ( http://blogs.msdn.com/bharry/archive/2007/07/30/team-system-web-access-power-tool-available.aspx ), la première version officiel de Team System Web Access est disponible à l'adresse suivante :

http://www.microsoft.com/downloads/details.aspx?FamilyID=2105C9EE-565E-47B9-A5AC-9A8FF8A07862&displaylang=en

 

Bon download :)

Framework, vous avez dis Framework ?

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.

[Fun] : Les Mvp doivent y voir une signification :)

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 :)

 

 

Team Development with Visual Studio Team Foundation Server

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 :)

  • Cryptage simple

    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

    Premiere version de "Work Item Creator"

    Voici un petit outil fort sympathique. Work Item Creator vous permet de créer/modifier vos Work Item, ainsi que les organiser hierachiquement. 

    Wok Item Creator

    Donc un outil a posseder absoluement.

    Vous pouvez le télécharger sur le portail CodePlex : http://www.codeplex.com/wicreator/

    NHibernate 1.2 passe en Release

    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 :)

    Nouvelle version pour Tech Head Brothers

    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 Big Smile

    Bon surf

     

    [HS] : Un week end sympa

    Y a pas que nos PC dans la vie, donc apres une semaine de travail (acharné Geeked) 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.

     

    Petite carpe de 5 à 6 Kg

     

    Conclusion: prenez le temps de prendre l'air Big Smile

    Posted: jeudi 3 mai 2007 21:24 par crazyht | 4 commentaire(s)
    Classé sous :
    Certifié 70-510 : TFS

    Et voila, je viens d'avoir les résultats de ma certification Beta 'TS: Microsoft Team Foundation Server: Configuration and Development'.

     

     

    [Patterns] : Abstract Factory + Proxy Dynamique

    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.   

    [Patterns] : Abstract Factory
    Voila juste un petit source pour mettre en place le design patterns "abstract factory"
    Certifié Dev Sharepoint 2007

    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 Big Smile

     

    Visual Studio Orca Beta 1 disponible

    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

    Enterprise Library 3.0 disponible

    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
    Windows SharePoint Services 3.0 Tools: Visual Studio 2005 Extensions enfin disponible

    Complement indispensable a toiut développeur SharePoint 2007. Il est enfin en version 1.0 a cette adresse :

    http://www.microsoft.com/downloads/details.aspx?familyid=19F21E5E-B715-4F0C-B959-8C6DCBDC1057&mg_id=10113&displaylang=en

    [Article] Création d'une brique de log

    Hello All,

     

    Voici un petit article sans pretention sur la création d'une brique de log (En attachement)

     

    Bonne lecture

    Une belle aventure est finie

    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 Crying

    Logo MVP

    Je remercie tout de meme tout ceux qui lors de cette belle aventure m'ont permis de grandir.

     

     

    MCP : TS: Visual Studio 2005 Team Foundation Server

    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...

    Office Server disponible sur MSDN

    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 :)

    Plus de Messages Page suivante »


    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