[.NET] Les collections immuables sont maintenant disponibles en version finale !

Microsoft vient d’annoncer que les collections immuables (Immutable Collections) sont maintenant disponible en version finale via la galerie NuGet.

Pour rappel, les collections immuables permettent de créer des listes qui ne change jamais cela permet de :

  • Partager une collection en privé et publique en s’assurant qu’elle ne sera jamais modifié.
  • Permet de faire de la programmation fonctionnelle (c’est un univers où tout est immuable…)
  • Et cerise sur le gâteau, elles permettent d’être utilisées facilement dans les scénario multi-thread. Leur design fait qu’elles sont automatiquement thread-safe…

Au passage, cette bibliothèque n’est pas intégré dans le .NET Framework, afin que l’équipe de développement de Microsoft puisse nous produire des releases régulières… Et ainsi d’éviter de baver ou d’attendre comme un gamin à noël, les prochaines versions du .NET Framework.

Dans les semaines qui vont venir j’écrirai quelques articles consacrés à ces collections afin de vous expliquer leur utilité. En attendant, ne restez pas immuable, et téléchargez cette bibliothèque depuis la galerie NuGet.

[.NET] Comment réaliser des tests unitaires sur une couche d’accès aux données qui utilise une base de données ?

Lorsque l’on développe sa couche d’accès aux données (à la main, via Entity Framework ou tout autre ORM) il est nécessaire comme tout code de le tester ! Beaucoup de développeurs ne testent pas leur couche d’accès aux données car ils considèrent que « cela ne se fait pas ». Or, pour moi, tout code qui est pondu par un développeur doit être testé sans exception ! Un code non testé est un code dont le développeur ne peut garantir son fonctionnement…

Cet article a pour vocation de vous montrer différentes stratégies qui existent et qui sont utilisés (que j’ai déjà rencontré à travers différentes missions) avec leurs inconvénients. A la fin de cet article, j’expliquerai une stratégie simple que j’applique systématiquement depuis 8 ans pour tester les couches d’accès aux données via des tests unitaires.

Continuer la lecture

[.NET] Attention à la redéfinition de la méthode GetHashCode()

Aujourd’hui, un développeur d’un client m’a signaler un « bug » dans la classe Dictionary<TKey, TValue> du .NET Framework. Après avoir étudié son problème pendant plus de 2 heures, (et je ne vous parle pas de mes cheveux !), le bug du Dictionary<TKey, TValue> venait du fait qu’il avait redéfini la méthode GetHashCode() sur un objet qui se basait sur des champs non-immuables !

Continuer la lecture

[.NET] Le point sur les collections du .NET Framework 4.0 et 4.5

Après plusieurs interventions pour auditer la qualité du code chez différents clients, je me suis rendu compte (et vraiment surpris) que beaucoup de développeurs ne connaissaient pas toutes les collections disponibles du .NET Framework. Certains se limitent aux listes et aux tableaux, et d’autres ne savent réellement pas où et quand utiliser une Collection<T>, une List<T> ou un simple tableau…

Cet article à pour but de présenter très rapidement les différentes collections qui existent dans le .NET Framework et dans quelles cas les utiliser. Cet article explique aussi les nouvelles interfaces qui sont apparues dans le .NET Framework 4.5 afin de palier un problème de conception initial du .NET Framework. Cette article ne parlera pas des collections qui ne sont pas typées et que je considère moi-même obsolète dans le .NET Framework ainsi que les collections spécifiques à WPF/Silverlight.

Continuer la lecture

[.NET] TechDays 2011 : Détecter vos erreurs de programmation à la compilation avec Code Contrats du Framework 4.0

Dans moins d’un mois aura lieu les TechDays de Microsoft à Paris. A cette occasion j’aurai le plaisir d’animer une session consacrée à Code Contracts avec Amine ZEMZEMI (MSP).

300x250_inscription

Code Contracts est une nouveauté du .NET Framework 4.0 qui permet de définir des contraintes qui seront validées à l’exécution et/ou à la compilation !

Venez donc découvrir dans cette session les différents types de contrôles que vous pourrez mettre en place (pré-conditions, post-conditions,…etc) et comment ils vont améliorer la qualité de votre application !

Après les TechDays, Amine et moi-même rédigerons très certainement plusieurs articles sur Code Contracts.

Accéder à la page officielle de la session sur Code Contracts

[.NET] Changer le volume du son de Windows

Amis DJ, suite à une question sur les forums Microsoft, je viens de développer une petite classe permettant aux utilisateurs de changer le volume du son de Windows. Pour cela je fais appel aux API Windows suivantes : waveOutGetVolume et waveOutSetVolume qui permettent respectivement de récupérer et de modifier le volume du son de Windows. 

Continuer la lecture

[WTS .NET] Bibliothèque .NET pour l’utilisation de Windows Terminal Services

Je viens de créer sur le site du CodePlex un projet s’intitulant : « Windows Terminal Services .NET Library« . Comme son nom l’indique c’est une bibliothèque .NET qui permet de manipuler les services Windows Terminal Services.

Elle permet en outre de manipuler :

  • Les sessions utilisateurs (consulter leur état, les deconnecter, …etc).
  • Les processus utilisateurs (consulter leur état, les terminer).
  • Et encore d’autres fonctionnalités à venir…

Bien évidemment, il est possible d’utiliser cette bibliothèque sur un serveur (ou tout simplement un poste) où Windows Terminal Services n’est pas installé afin de consulter les sessions ouvertes par le bureau à distance.

Cette bibliothèque utilise les API Windows WTS de Microsoft et n’utilise aucun autre composant tiers ! Sur le site du projet, vous pouvez télécharger aussi une petite application Windows Forms exemple (que j’utilise pour réaliser des tests).

Si vous souhaitez apporter votre contribution à cette bibliothèque, n’hésitez pas à m’en faire part !

[.NET] Comprendre la philosophie des exceptions sous .NET

Depuis la création du .NET Framework, j’ai vu beaucoup d’articles sur Internet concernant la gestion des exceptions d’un point de vue technique, mais très peu sur le concept et la philosophie de ce mécanisme.

Les exceptions offre un très grand confort au niveau de la gestion des erreurs, permettant aux développeurs de se concentrer beaucoup plus sur leur code fonctionnel. Malheureusement, la gestion des exceptions est souvent mal utilisée par les débutants… Continuer la lecture

[.NET] Récupérer la sortie d’un processus

Une question qui est fréquemment posée dans les forums de Microsoft : « Comment récupérer la sortie d’un processus ».
La méthode la plus simple sans se prendre la tête est d’exécuter un fichier de commande « .cmd » qui se contente de rediriger la sortie d’un processus vers un fichier. Il suffit ensuite d’exploiter ce fichier…

Continuer la lecture