Catégorie: C#

23/03/2012

Permalink 11:11:00, Catégories: .Net, C#, 44 mots   French (FR) , Philippe Vialatte

Le beurk du jour

Tiens, ca faisait longtemps que j'avais pas bloggé...

Qu'est-ce que vous pensez de ce bout de code, et est-ce que vous pouvez deviner pourquoi il me donne des boutons ?

flag = hidValue.Value == "1" ? "F" :   
       hidValue.Value == "2" ? "Y" :    
       hidValue.Value == "3" ? "N" : null;

Y'a rien a gagner ;)

Vous devez être identifié pour poster un commentaire.

23/10/2009

Permalink 20:57:00, Catégories: Récapitulatif .NET, Récapitulatif, .Net, ASP.NET, C#, 65 mots   French (FR) , Philippe Vialatte

[.NET] Une chose que j’ignorais avec les initialiseurs d'objets

Comme quoi on en apprends tous les jours.

La MSDN ne fournissant que des exemples du genre :

 Cat cat = new Cat { Age = 10, Name = "Sylvester" };

Je m'étais résigné à n'utiliser les initialiseurs qu'avec des constructeurs sans paramètres.

Alors qu'en fait, non, on peut tout à fait faire ceci :

row.Cells.Add(new WorksheetCell("Ventes par mois", DataType.String, "Entete") { MergeAcross = 4 });

Qui fonctionne très bien :)

Vous devez être identifié pour poster un commentaire.

20/10/2009

Permalink 16:33:00, Catégories: Récapitulatif .NET, Récapitulatif, Récapitulatif Génie Logiciel, C#, 152 mots   French (FR) , Philippe Vialatte

[.NET][G. Logiciel] Encore une couche sur l'IoC ?

Suite a encore un mini tollé dans la communauté Agile/Alt.Net, une fois de plus provoqué par un billet de Joël Spolski (mais bon, ca devient une habitude ;) ), une des nombreuses critiques faites concernait le "cout d'entrée" pour utiliser des outils considérés comme pas encore "standards"

...sous-entendu, le développeur lambda ne peut/veut pas comprendre l'intérêt d'utiliser, par exemple, un ORM, un framework IoC ou les principes SOLID.

Je ne reviendrais pas sur le sujet (déjà fait la dernière fois), mais Rob Conery (depuis peu parti de Microsoft) a pondu quelques billets très bien fichus sur l'intérêt d'utiliser un framework IoC, ou sur le mocking.

Alors, oui, c'est en anglais, mais c'est le prix a payer ;)


200 Page Manual on Inversion of Control (plus or minus 199)
200 Page Manual on Inversion of Control, Part 2
Using Dependency Injection and Mocking For Testability

Vous devez être identifié pour poster un commentaire.

06/10/2009

Permalink 09:02:00, Catégories: Récapitulatif .NET, .Net, C#, 152 mots   French (FR) , Philippe Vialatte

[.NET] L'operateur ??

En revue de code, cette semaine, j'ai eu beaucoup de code du genre :

   1: HttpContext context = HttpContext.Current;
   2: LifeCycle lifecycle;
   3:  
   4: if (context.Session["CachedLifeCycle"] != null) {
   5:     lifecycle = (LifeCycle)context.Session["CachedLifeCycle"];
   6: } else {
   7:     lifecycle = Factory.GetLifeCycle();
   8:     context.Session["CachedLifeCycle"] = lifecycle;
   9: }
  10:  
  11: return lifecycle;

Genre...beaucoup...

Et du code comme ca, aussi (je simplifie :

   1: if (value == null){
   2:   message = "default";
   3: }else{
   4:   message = value;
   5: }

Et la, du coup, il a fallu sortir un coup l'artillerie pour faire rentrer tout le monde dans le droit chemin, a savoir, l'operateur ??

L'operateur ?? est un operateur qui renvoie, au choix, sa partie gauche si elle n'est pas nulle, et la partie droite sinon.

Donc, pour le second code, il permets de faire simplement :

   1: message = value ?? "default";

Le premier code est un peu plus compliqué, mais ?? va nous permettre de clarifier un peu tout ca aussi :

   1: HttpContext context = HttpContext.Current;
   2: LifeCycle lifecycle = (LifeCycle)context.Session["CachedLifeCycle"] ?? Factory.GetLifeCycle();
   3: context.Session["CachedLifeCycle"] = lifecycle;
   4:  
   5: return lifecycle;

Vous devez être identifié pour poster un commentaire.

11/09/2009

Permalink 10:30:00, Catégories: Récapitulatif .NET, Récapitulatif, .Net, Tests, Récapitulatif Génie Logiciel, C#, 395 mots   French (FR) , Philippe Vialatte

[.NET][G. Logiciel] Tester les exceptions avec NUnit

En ce moment, je suis en pleine session d'écriture de tests, et une chose en particulier me fait tiquer, a savoir les tests qui ne sont pas couverts a 100 %.

Dans le code en questions, les tests qui font baisser la couverture sont en général des tests qui concernent les exceptions.

On y trouve deux familles de tests, on a donc:

Le test "avec attribut" 

[Test]
[
ExpectedException(typeof(ArgumentOutOfRangeException))]
public void MinIntLimit() {
   
Roman r = new Roman(0);
}

Ce test utilise l'attribut ExpectedException pour que le test fonctionne réussisse si et seulement si il jette un exception du type demande (ici, ArgumentOutOfRangeException). Le problème, en termes de couverture, est que tout le code situe en dessous de l'exception est ignore, le code n'est donc pas couvert a 100%.

Le test "traditionnel"

Si on n'utilise pas NCover, ou si on veut faire des tests sur le message retourné, on produit plus régulièrement de genre de code :

[Test]
public void TestThatProperExceptionIsThrown() {
   
try {
       
MethodUnderTest(anInvalidObject);
       
Assert.Fail("Expected an exception, but none was thrown");
    }
catch (ArgumentException ex) {
       
Assert.AreEqual(ex.ParamName, "myParam");
       
Assert.AreEqual(ex.Message, "My message");
    }
catch (Exception ex) {
       
Assert.Fail("Expected an ArgumentException but got a "
          + ex.GetType().FullName);
    }
}

NB. : cet exemple vient directement du blog de NUnit, alors on peut admettre qu'il soit mentionné comme "bonne pratique"

Sauf que...

Sauf que si les tests fonctionnent correctement, une partie du code ne sera jamais atteinte, de même que si ils échouent.

Pourquoi ca pose problème ?

En général, je ne cherche pas a atteindre 100% de couverture...dans mon code testé ! Par contre, si une partie du code de test n'est pas joué, cela peut vouloir dire, au choix, deux choses :

  1. Que le code testé est faux
  2. Que le test est faux

Comment corriger les tests ?

Une option est de reprendre le code ci-dessus de la façon suivante :

[Test]
public void TestThatProperExceptionIsThrown() {
   
bool wasTriggered = false;
   
try {
       
MethodUnderTest(anInvalidObject);
    }
catch (ArgumentException ex) {
       
wasTriggered = true;
       
Assert.AreEqual(ex.ParamName, "myParam");
       
Assert.AreEqual(ex.Message, "My message");
    }
   
Assert.IsTrue(wasTriggered, "Expected an exception, but none was thrown");
}

Le catch sur une exception n'est plus présent...effectivement, mais de toute façon, si il n'est plus présent, le test va échouer quoi qu'il arrive...

Et selon vous, la couverture du code de test est-elle importante ? Cette méthode vous semble-t'elle valide ?

Vous devez être identifié pour poster un commentaire.

25/08/2009

Permalink 17:09:00, Catégories: .Net, Livres, C#, 789 mots   French (FR) , Philippe Vialatte

Brownfield Application Development in .Net

Ce livre est encore en pré-production, mais comme j' ai eu la chance de participer à sa revue, je me suis dit que cela ne ferait pas de mal de vous en faire profiter...

image

Brownfield Application Development in .NET

Kyle Baley and Donald Belcham

Softbound print: December 2009 (est.) | 550 pages
ISBN: 1933988711

Note : 5/5 5 sur 5

Dès que le livre sort officiellement, je corrige toute info erronée, et ça part dans les critiques ;)

» Lire la suite!

Vous devez être identifié pour poster un commentaire.

04/07/2009

Permalink 21:14:00, Catégories: Récapitulatif .NET, Récapitulatif, SubSonic, C#, 152 mots   French (FR) , Philippe Vialatte

[.NET] Subsonic 3.0 est disponible !!!

Ca y'est, enfin !!!

Apres de longs mois d'attente (pour moi), la version 3 de mon outil chouchou sort enfin ;)

Au programme de la version 3:

  • un moteur Linq qui permets d'utiliser Subsonic "à la" Linq to Sql (mais avec toutes les table supportées, Oracle, SQLite, et compagnie)
  • un système de templates basés sur les templates T4, ce qui les rends faciles à customiser ou à faire évoluer
  • une tonne de tutoriels (la version précédente en manquait cruellement), disponibles ici
  • un nouveau système de Repository, qui, couplé aux migrations, permets entre autres une approche beaucoup plus "POCO", et même de générer la base de données automatiquement depuis le code !

Forcément, cette version nécessite le Framework 3.5, ca tombe bien, mon client vient de passer à Visual Studio 2005 ;).

Le lien pour télécharger la bête est là :

http://subsonicproject.com/Download

.et je comptes bien en reparler ;)

Vous devez être identifié pour poster un commentaire.

05/06/2009

Permalink 08:36:00, Catégories: Récapitulatif .NET, Récapitulatif, .Net, ASP.NET, C#, MVC, 145 mots   French (FR) , Philippe Vialatte

[.NET] [MVC] La feuille de route pour la v2 dévoilée

La feuille de route pour la version 2 du Framework MVC vient d'être dévoilée sur CodePlex.

http://aspnet.codeplex.com/Wiki/View.aspx?title=Road Map

L'information principale, a mon avis, est que le support pour la Beta 1 de Visual Studio 2010 sera assure par un add-on des Juin, et que MVC sera intégré a la Beta 2....et que la version 3 du Framework ne supporter pas VS 2008 (quand je pense que je travaille encore sous 2005...)

Les autres modifications sont principalement des améliorations, la plus sympa étant probablement des helpers fortement typés pour générer des champs et des liens dans la vue.

(Pour plus d'infos sur la problématique, voir ici :http://www.haacked.com/archive/2009/06/02/alternative-to-expressions.aspx)

Par contre, forcement, pas encore de date de sortie prévue, mais j'ai le sentiment qu'on verra cette V2 dans Visual Studio 2010 ;)

Vous devez être identifié pour poster un commentaire.

26/05/2009

Permalink 14:04:00, Catégories: Récapitulatif .NET, Récapitulatif, SubSonic, C#, 153 mots   French (FR) , Philippe Vialatte

[.NET] SQLite et SubSonic

Suite a une question sur le forum (et pour défendre SubSonic, forcement ;) ), je me suis penché, hier soir, sur l'utilisation de SQLite avec SubSonic (un problème de jointure, mais ne nous dispersons pas...)

Du coup, je me suis installé SQLite sur ma machine a la maison, téléchargé le provider SQLite pour ADO.NET, et en...trois minutes, j'ai ma base en route.

Je ne connaissais pas du tout SQLite, mais cette base de données me botte...

Une dll a ajouter au projet web, un fichier db3, et on a une petite base de données relationnelles légère, suffisamment réactive pour des petits volumes, et qui se sauvegarde en copiant le fichier db3...Que du bonheur, quoi ;)

Pour les pré-requis:

Pour une comparaison entre MySQL, PostgreSQL et SQLite, voir ici:

http://www.sqlite.org/speed.html

Vous devez être identifié pour poster un commentaire.

27/04/2009

Permalink 21:23:00, Catégories: Récapitulatif .NET, Récapitulatif, .Net, SubSonic, C#, 346 mots   French (FR) , Philippe Vialatte

[.NET] [SubSonic] Utiliser l’objet InlineQuery

J'avais complètement oublié de le mentionner dans mon article précédent sur SubSonic, mais, de toutes les nouveautés de SubSonic dans la version 2.1, une des plus utiles quand on en à besoin est l'objet InlineQuery.

En effet, comme je le montrais (et si vous n'avez pas lu l'article, allez-y maintenant ;) ), SubSonic peut se révéler très puissant pour travailler avec des opérations de type CRUD, ainsi que pour le mapping des objets de la base de données avec les objets .net, mais qu'en est-il des requêtes "tordues" ou "bizarres" avec lesquelles on est régulièrement forcé de travailler (et je ne vous parle pas des requêtes dont on hérite avec la maintenance d'une application vieille de quelques années :-/.) ?

Est-ce que je ne vais pas avoir aussi vite fait de tout me taper à la main ?

Dans les versions précédentes, on avait grosso modo deux choix :

  1. Créer une vue ou une procédure stockée (en fonction de l'action), et appeler la vue ou l'action à partir de SubSonic
  2. Avoir un moyen annexe pour "shooter" des requêtes directement dans la base (oui, un bon vieux select, avec un datareader, des dataset, des connections, t tout le toutim.)

Depuis la version 2, on à enfin un nouveau choix, plus "propre", et surtout plus rapide à mettre en ouvre, vous l'aurez deviné, l'objet InlineQuery.

En terme de code, il suffit de faire :

ContactCollection contacts = new InlineQuery()
   
.ExecuteAsCollection<ContactCollection>("SELECT * from Contact Where surname = @surname", "Vialatte");

(Ceci est évidemment un exemple simpliste, mais c'est pour donner une idée).

Dans l'exemple du dessus, le @surname va permettre à SubSonic de créer une requête paramétrée directement. Si on avait voulu ajouter plus de paramètres, la fonction attends un tableau d'objets, on peut donc se lâcher ;).

InlineQuery propose aussi des méthodes renvoyant des DataReader, des DataSets, des scalaires (wow, un ExecuteScalar<T> ;) ), et même un ExecuteTypedList, pour renvoyer une liste de T.

Voila, facile, pas cher, que du bonheur :D

Vous devez être identifié pour poster un commentaire.

22/04/2009

Permalink 08:18:00, Catégories: Récapitulatif .NET, Récapitulatif, .Net, SubSonic, C#, 109 mots   French (FR) , Philippe Vialatte

[.NET] [Article DVP] Introduction a SubSonic

Aujourd'hui, jour de sortie d'article ;)

Apres pas mal de transpiration (premières lignes écrites en Décembre), voila un tutoriel sur l'utilisation de base de SubSonic (SubSonic, c'est bon, mangez-en ;) )

L'article est présent ici :

http://philippe.developpez.com/articles/Subsonic/

Le bon coté,  c'est que maintenant que l'article est publie, je vais pouvoir parler un peu plus de SubSonic sur ce blog (avant, je n'avais pas de référence en français a fournir :D )

Maintenant, allez télécharger SubSonic, et commencez a travailler avec une DAL propre et facile a utiliser en moins de temps qu'il ne vous en a fallu pour lire ce post...

Vous devez être identifié pour poster un commentaire.

13/03/2009

Permalink 20:26:00, Catégories: Récapitulatif .NET, Récapitulatif, Livres, C#, 116 mots   French (FR) , Philippe Vialatte

[.NET] [Livres] Pourquoi les Early Acces, c’est trop bien

Comme je l'ai mentionné il y'à quelques jours, je suis en pleine lecture, en ce moment, du livre "Brownfield Application Development in .NET", en early access.

La ou la formule est géniale, c'est que:
- Mardi, je trouve une erreur dans le livre
- Jeudi, l'auteur me réponds en vitesse pour me remercier (déjà, sympa de voir que non seulement les posts sont lus, mais en plus pris en compte)
- Mais le plus fort, c'est que je suis le blog de l'auteur depuis un moment, et que dans la foulée, il avait écrit un petit post sur le point en question'

Voila, personnellement, je trouve assez super niveau mentalité, et ouverture ;)
image

Vous devez être identifié pour poster un commentaire.

Liste des blogs

Blog de Philippe Vialatte

Ce blog contient:
- des bouts de code
- quelques news
- des états d'âme

....et des fois, quelque chose d'intéressant ;)

Blog roll

Profil MVP

Réseaux sociaux



Catégories


Rechercher

<  Mai 2012  >
Lun Mar Mer Jeu Ven Sam Dim
  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      

Syndiquez ce blog XML

Articles :

Commentaires :

 
 
 
 
Partenaires

Hébergement Web