Quoi de neuf sur Microsoft?

 

Il est primordial de se tenir informé des évolutions de son environnement de développement et de faire ce qu’on appelle communément de la veille techno. En ce qui me concerne, j’interviens sur une mission en tant développeur C# et je m’informe continuellement .

Découvrez ainsi mon retour sur les dernières versions Microsoft .NET 4.7 et Visual Studio 2017.

picto microsoft

1- .NET 4.7

Microsoft .NET Framework 4.7 est une mise à jour sur place hautement compatible des précédents framework .NET.

ll ajoute principalement des fonctionnalités sur le transfert de données, la communication réseau et le développement d’interfaces utilisateurs

  • Pour le transfert de données, c’est en particulier la classe DataContractJsonSerializer et la sérialisation WCF qui ont été améliorées;
  • Pour la communication réseau, il y a maintenant le possibilité de paramétrer les protocoles TLS par défaut alors qu’auparavant, il était nécessaire de coder;
  • Pour les technologies liées aux interfaces utilisateurs, on peut noter des fonctionnalités supplémentaires dans ASP.NET, WINFORM, WPF. Par exemple, la gestion de la mémoire pour ASP.NET, que ce soit au niveau du cache ou des ressources disponibles. Pour WINFORM ou WPF, il y a la gestion de la haute résolution (meilleur rendu graphique sur les moniteurs haute résolution), ou la gestion du tactile et du stylet (pour les moniteurs tels que la surface pro de Microsoft).

2 – Visual Studio

Visual Studio est une suite de logiciels conçue par Microsoft. Plus précisément, il s’agit d’un ensemble complet d’outils de développement permettant de générer des applications web ASP.NET, des services web XML, des applications bureautiques et des applications mobiles.

Visual Basic, Visual C++, Visual C# utilisent tous le même environnement de développement intégré (dit IDE), qui leur permet de partager des outils et facilite la création de solutions faisant appel à plusieurs langages.

Par ailleurs, ces langages permettent de mieux tirer parti des fonctionnalités du Framework .NET.

La dernière version est Visual Studio 2017. Voici les principales évolutions recensées sur cette version :

  • L’IDE est plus rapide plus réactif et est moins gourmand en consommation mémoire. Il contient bon nombre d’outils permettant d’être plus productif. On peut noter par exemple, la notification des tests unitaires faite en temps réel (pas uniquement pour mstest mais aussi Nunit et Xunit). Il en est de même pour la validation de dependance d’architecture. Cela risque de faire de l’ombre sur des outils comme Ncrunch;
  • Les tâches sont simplifiées : plus besoin de gérer les branches GIT via une extension comme gitextensions, visual studio l’intègre. Il est maintenant possible de configurer notre environnement de développement et le retrouver sur le poste que l’on souhaite en utilisant la gestion des extensions itinérantes;
  • Des raccourcis ont été ajoutés pour naviguer plus facilement dans une solution (on retrouvera des raccourcis similaires à ceux proposes par Resharper ou Productivity power tool);
  • Le développement d’application mobile: il est désormais possible d’innover et d’obtenir des résultats rapidement grâce à Xamarin, qui regroupe les exigences des différentes plateformes mobiles en une seule base de code ;
  • Il y a également beaucoup de nouveautés sur le debogage, notamment la gestion améliorée des erreurs.

N’hésitez pas à tester ces nouveautés et nous faire part de votre retour d’expérience !

facebooktwittergoogle_plusmail

Optimiser du code utilisant la reflexion avec FastMember

Robin

L’application sur laquelle je travaille actuellement calcule des positions à partir d’objets COM modélisant les deals passés dans le système. La volumétrie est importante et il est nécessaire de wrapper ces composants COM dans des objets .NET utilisables par mon application. Ces objets COM sont complexes et de plusieurs types (un par type de deal).
Cependant, l’application est basée sur un modèle de deal C# plat, prenant en charge tous les types de deal et gardant une référence vers le deal COM associé. Chaque appel à une propriété de cet objet C# entraîne une reflexion sur le deal COM sous-jacent afin d’en déterminer la valeur.

Les propriétés de cet objet ressemblaient à peu près à ça:

J’ai récemment effectué une refonte de ce processus, en créeant une Factory instantiant dès le départ toutes les propriétés du deal .NET à partir du deal COM, sans garder de référence entre les deux.

Ce refactoring a eu un impact très important sur l’utilisation mémoire de l’application (un facteur 2-3), mais les performances étaient assez catastrophiques. Etant donné que les deals COM pouvaient être de types différents et inconnus au runtime, il était nécessaire d’utiliser la reflexion pour déterminer la valeur des propriétés (sachant qu’il fallait extraire 40 propriétés par deal COM).

Alors que je reflechissais aux pistes d’optimisation, j’ai découvert FastMember, une librairie développée par l’un des membres les plus actifs de la communauté StackOverflow : Marc Gravell. Il annonçait des métriques démentielles sur son blog relatives à l’accès aux valeurs de propriétés, à savoir:

Static C#: 14ms
Dynamic C#: 268ms
PropertyInfo: 8879ms
PropertyDescriptor: 12847ms
FastMember.TypeAccessor.Create: 73ms
FastMember.ObjectAccessor.Create: 92ms

La librairie est très simple à utiliser:

Effectuer un wrapping initial sur l’objet sur lequel va s’effectuer la reflection :

Ce wrapping initial est un peu coûteux, mais les accès ultérieurs aux propriétés de l’objet seront très rapides, et on s’affranchit complètement de la syntaxe lourde de la réflexion :

Dans mon cas, j’ai implémenté une méthode simple dans ma Factory, permettant de récupérer la propriété du deal COM ou de spécifier une valeur par défaut, au cas où le deal COM n’a pas la propriété interrogée :

L’utilisation de cette librairie a viabilisé mon projet de refactoring, et on est proche des perfs que l’on attendrait d’un code C# statique !

facebooktwittergoogle_plusmail

CleanCoder : Giving up on TDD

Christian

Ou pourquoi certains dév abandonnent TDD par Uncle Bob Martin.

Ce post est une mine d’arguments pour expliquer et convaincre vos collègues de l’utilité de la méthode Test Driven Development.

Morceaux choisis

Design et TDD

– But I thought TDD meant that you didn’t have to design.

Yeah, and: “Love means you never have to say your sorry.” What a bunch of horse hockey! We are programmers! We design! We create structures with high cohesion and low coupling. We manage dependencies. We isolate modules. WE. DESIGN.

Les tests nous parlent

Something that is hard to test is badly designed.

– Hmmm. I’m not sure…

Look. Suppose you ask me to write an app to control your grandmother’s pacemaker. I agree, and a week later I hand you a thumb-drive and tell you to load it into her controller. Before you do you ask me: “Did you test it?” And my response is: “No, I chose a design that was hard to test.”

facebooktwittergoogle_plusmail

Unity : tester l’instanciation des classes

Christian

Cela fait plusieurs fois que je rencontre le problème des enregistrements manquants dans Unity. Le projet se lance et on obtient l’erreur suivante :

Les applications en entreprise nécessitent souvent que des webservices soient lancés, des cas de tests créés etc … .
Mettre toutes ces conditions en place prends du temps – pour parfois aboutir à ce message d’erreur, et être obligé de tout recommencer.
Heureusement il est possible d’automatiser.
Régler le problème d’un test unitaire
Pour pallier à cette perte de temps, voici un test unitaire qui instancie tous les types définis dans Unity.
J’utilise dans cet exemple MSTest comment moteur de test et FluentAssertions comme librairie d’assertion (plus lisible que la librairie d’assertion classique).
La collection _typeToExclude donne la possibilité d’exclure certains types au cas où.

Enjoy !

 

facebooktwittergoogle_plusmail