!BadProcESs.Equals(42)

Aller au contenu | Aller au menu | Aller à la recherche

mercredi 14 mars 2012

[MVVM] Astuce: une classe de base simple et pratique pour vos ViewModels

Le design pattern MVVM est quelques chose de formidable, il faut bien l'avouer :)

Comme vous le savez certainement, un de ses fondements principaux repose sur l'interface INotifyPropertyChanged, qui va nous permettre de lever l'évènement PropertyChangedEventHandler et notifier notre View du changement opéré sur la propriété en question.

La petite astuce présentée ici consiste à factoriser un peu notre code, notamment lorsque l'on utilise pas de framework "tout en un" style MVVM Light Toolkit afin d'éviter une certaine redondance, en l'occurrence l'implémentation du setter des propriétés du ViewModel. L'idée est donc de créer une classe abstraite dont hériteront tous nos ViewModel (best practice) et d'y adjoindre une petite modification utile :

Je passerai l'explication de l'implémentation de la méthode OnNotifyPropertyChanged, qui est ici standard. Celle-ci est toutefois en access mode privé car on ne doit plus y accéder directement, on passera donc par l'appel à la méthode SetValueAndNotifyChanged<T>, qui fera l'essentiel du travail.

Voici comment l'utiliser dans notre ViewModel :

On vois clairement ici la simplification : le code de SetValueAndNotifyChanged<T> qui devait se trouver dans le setter de la propriété UniqueID est remplacé par un simple appel à la méthode de BaseViewModel. On note le passage par référence, très important, de la variable _uniqueID, afin que bien entendu celle-ci puisse être modifié par SetValueAndNotifyChanged<T>.

Encore un exemple très simple de refactorisation de code. Si vous avez d'autres astuces de refactoring à ce sujet, n'hésitez pas à les partager en commentaires ! :)

lundi 20 février 2012

[WP7/C#] Une AUTRE (plus meilleur ;) ) méthode pour rendre NetworkInterfaceType asynchrone

Finalement, après mon dernier billet concernant une "méthode pour rendre NetworkInterfaceType asynchrone" j'ai souhaitez "pousser plus loin" le refactoring en utilisant une méthode plus actuelle : la très utile classe "Action<>". Je ne vous ferai pas un cours sur ce délégué que je pense que vous connaissez bien, mais simplement voici comment l'utiliser dans notre cas (j'en ai profité pour faire remonter l'énumération NetworkInterfaceType complète) :

Et pour l'appeler, c'est d'une simplicité enfantine,et très propre grâce à l'expression lambda déclarant une méthode anonyme :

En attendant l'arrivé de Task<> dans le framework Silverlight, voici une belle (et optimale) façon de coder sur un thread auxiliaire :)

jeudi 9 février 2012

[WP7/C#] Une méthode pour rendre NetworkInterfaceType asynchrone

Hier soir je me suis occupé du refactoring de quelques points que j'avais relevés sur mon application FreeWifi Login et notamment (surtout ^^) du moment où je contrôle le type de connexion réseau data actuellement utilisée (3G, Wifi,...) via la propriété NetworkInterfaceType. Comme vous le savez certainement déjà, cette propriété n'est PAS asynchrone, ce qui fait que, lorsqu'elle est appelée, celle-ci bloque méchamment le thread UI pendant parfois plusieurs secondes, ce qui n'est pas très user friendly... -_-'

Lire la suite...

mercredi 25 janvier 2012

[C#] Optimisation: appeller une méthode/propriété sans instancier la classe dans une variable

Suite à une discussion aujourd'hui avec un ami développeur au sujet d'une réponse d'un forum portant sur l'optimisation mémoire, j'ai procédé à un test pour étayer mes dires concernant ce "tip", visiblement peu connu, de l'appel direct d'une méthode/propriété d'une classe sans passer par le stockage de l'instance en variable (dans le cas ou vous n'avez besoin que d'un seul appel à cette instance), et à ce sujet il était donc question de savoir si cela avait un intérêt quelconque pour l'optimisation mémoire ou pas, la réponse est donc oui !

Lire la suite...

mardi 17 janvier 2012

[C#] De la réutilisation de code: le cas de la gestion des exceptions

J'ai eu le cas récemment de repenser la gestion des exceptions au niveau de la DAL d'un projet, le plus bas niveau fonctionnel du projet en question.

Celle-ci se présente sous la forme de plusieurs classes indépendantes comprenant plus ou moins de méthodes selon le cas. La contrainte étaient de centraliser la gestion d'erreurs remontés par cette DAL uniquement, en évitant au maximum la redondance de code bien entendu, j'ai donc opté pour un helper (dans une classe static) simple mais efficace, utilisant le très utile délégué Action et permettant ainsi d'encapsuler le code des méthodes de cette DAL :

Rien de bien sorcier donc. Cette méthode va permettre d'invoquer le code envoyé dans un bloc try {} catch {} fin et de centraliser la gestion des éventuelles exceptions résultantes.

Vous pouvez maintenant "encapsuler" votre code comme dans l'exemple suivant :

vendredi 2 septembre 2011

[WP7/C#] Astuce IsolatedStorage: générer un nom de fichier unique

Il vous est probablement déjà arrivé de devoir créer plusieurs fichiers dans l'IsolatedStorage sans avoir de quoi les nommer de façon à ce qu'ils soient uniques dans leur répertoire de destination (condition indispensable bien entendu, sinon il y a collision :) ). Ainsi, si les données que vous souhaitez stocker contiennent un ID unique et différentiable, pas de problème, mais dans le cas contraire...

J'ai personnellement trouvé une petite astuce que j'utilise dans plusieurs de mes projets qui consiste à utiliser la génération d'un Guid (identifiant unique), voici le snippet en question :

lundi 15 août 2011

[WP7/MANGO][API] Partager (très) simplement et rapidement un lien sur les réseaux sociaux

Parmi les API de la nouvelle version de Windows Phone 7, Mango, en voici une aujourd’hui que je trouve particulièrement utile et qui va simplifier énormément le partage de lien sur les réseaux sociaux (actuellement sont gérés Twitter, Facebook et LinkedIn) : Il s’agit de la nouvelle tâche nommée ShareLinkTask. Tout le traitement est ainsi pris en charge par l’OS : authentification (car il utilisera les credentials que vous avez renseigné dans le système), raccourcissement d’url, … En plus de l’avantage de ne plus avoir à gérer les évolutions des API des réseaux sociaux, le code sera d’autant plus simple à maintenir, c’est tout bénéfique quoi :)

Et voici donc comment réduire une centaine de ligne de code en 5 :

Capture

Impressive, isn't it ? :P

jeudi 16 juin 2011

[WP7/SL] Astuce: Ne pas oublier le bottom margin de la ListBox !

Vous vous en êtes certainement déjà rendu compte dans certaines applications Windows Phone 7 en scrollant tout en bas d'un contrôle ListBox sur une page comportant une PhoneApplicationBar : Le dernier item de la liste est bien souvent partiellement voir complètement masqué par la toolbar.

Ce n'est pas forcément un problème en soit à première vue car on peux "tirer" vers le haut la ListBox et faire apparaitre, tant que l'on maintien l'appui, le dernier item mais dès qu'on le relâche, il re-disparait : Comment cela se passe t'il alors si l'on a une action sur cet item (et donc qu'il devient impossible d'appuyer dessus) ?

En fait la solution est toute simple, mais il faut y penser ! Il s'agit en fait de simplement régler correctement la propriété Margin de notre ListBox, et plus précisément, le nombre correspondant au bottom (70px semble être un bon compromis pour un résultat satisfaisant) :

Enfantin n'est il pas (je ne sais même pas pourquoi j'en fait un billet tiens ;) ) ?

vendredi 27 mai 2011

[WP7] Windows Phone 7.1 "Mango" - Class Library Reference

Tiens, comme j’avais rien de spécial à faire hier soir (pas là tête au “code”, ça m’arrive très rarement, mais ça m’arrive ;) ) et que comme d’habitude les programmes à la télévision ne m’intéresse pas (ça c’est pour la petite histoire :) ), je me suis mis à recréer l’arborescence des classes du framework Windows Phone 7.1, dit “Mango”, sous forme d’un PDF de 3 pages imprimable pour pouvoir vous faire un joli poster :).

Bon je ne vous cache pas que ce n’est pas un travail très intéressant, cependant il y a un bénéfice à en tirer, on fait le tour du framework au moins, on peux ainsi constater ce qu’il a dans le ventre.

Lien pour télécharger le fichier: Windows Phone 7.1 Class Library Reference (PDF)

samedi 21 mai 2011

[ASP.Net] Astuce: Remonter en tête de page après un postback sur un DataPager

Ce matin je cherchai la solution qui me permettrai de “remonter” en tête de page et donc de passer outre la propriété maintainScrollPositionOnPostBack, dans le web.config de BashTweet (la mettre à false n’était pas le but recherché) sur le changement de page des DataPager de mes listes, et après avoir essayé plusieurs méthodes comme RegisterStartupScript, j’ai trouvé une astuce simple à mettre en oeuvre et rapide. Je vous la donne ici afin que vous ne perdiez pas une demi-heure comme moi si le cas se présentai, et voyez vous-même, c’est d’une simplicité déconcertante Sourire

Donc un simple window.scrollTo(0, 0); sur l’event javacript onclick() et l’affaire est réglé (ouf ! Tire la langue ).

- page 1 de 3