Revue du Web du 10 mai

Les tweets de la semaine

http://twitter.com/WindowsAzure/status/13342352480 quand Windows Azure rencontre CQRS

http://twitter.com/innovimax/status/13413675316 une librairie .NET pour manipuler des documents inDesign cherche des testeurs

 http://twitter.com/webwizo/statuses/13505951473 le meilleur et le pire dans la même phrase ?

La question Stackoverflow

http://stackoverflow.com/questions/280751/what-is-the-best-practice-for-copy-local-and-with-project-references la gestion des références peut être ardue quand le nombre de librairies externes et  de projets augmentent. Cette question et les réponses apportées abordent la gestion des librairies Visual Studio.

Actualités Microsoft

Une nouvelle version alpa de Internet Explorer 9 est sortie, on y trouve de nouveaux tests et fonctionnalités. Brad Abrams un des développeurs les plus connus chez Microsoft vient de quitter l’éditeur pour un autre mastodonte : Google. Son blog sur MSDN était très actif sur des sujets variés comme la BCL, RIA Services, MEF ou encore Internet Explorer. Son dernier billet résume bien un parcours exceptionnel.

Et puisque tout le monde est content de Windows 7 voici un guide complet de lifehacker.com sur les fonctionnalités de la TaskBar.

Actualités “Alt.NET”

Allez encore une fois on va parler CQRS mais on vous promets d’autres sujets pour les prochaines revues du web. En plus aujourd’hui on aborde une mise en garde sous la forme d’un billet de Udi Dahan. On entend beaucoup parler de cette architecture au point où on pourrait croire qu’elle va résoudre le problème de la faim dans le monde.En abordant le classique problème de la différence de perspective entre les développeurs et les usagers d’une solution, Udi revient sur la façon de poser les bonnes questions et cite celles que CQRS soulève : une architecture avec une utilisation très collaborative, une vue non exclusivement par entité et une fraîcheur des données moins pressante.

De l’autre côté

HTML5 on en parle beaucoup. Si vous êtes un développeur ASP.NET (MVC ou pas) ou si tout simplement vous vous intéressez aux technologies web vous pouvez consulter ce site : A List Apart. C’est une référence dans le domaine de l’intégration web, ce secteur à la croisée entre le design graphique, la technique (CSS, HTML, Javascript) et l’accessibilité. C’est sur ce site par exemple qu’on trouve les premiers articles sur les techniques que le CSS Sprite ou un résumé de HTML 5

Un projet

La mode des API “fluent” avec une utilisation des expressions lambda est vraiment partout dans le monde .NET (Fluent Nhibernate, Moq). Le projet de cette semaine est dans la même lignée : NBuilder. Il y a beaucoup de défis pour pouvoir exécuter des tests unitaires en dehors du contexte normal de l’application. La pratique du mocking est une des solutions pour isoler le système. NBuilder se situe dans la phase Arrange de la fameuse trilogie AAA (Arrange, Act, Assert), il faut avoir des données de test et ce travail peut être fastidieux.

Voici un exemple pour construire une liste de 10 objets de type Individual :

1: var toCreate = Builder

2: .CreateListOfSize(10);

3: var data = toCreate.Build();

les objets feront les propriétés primitives publiques valorisées avec une valeur générée.

On peut aussi initialiser certains champs (ici les 5 individus auront une propriété Birthday valorisée à la valeur donnée) :

1: var toCreate = Builder

2: .CreateListOfSize(10)

3: .WhereTheFirst(5)

4: .Have(i => i.Birthday = new DateTime(1978, 1, 24));

individual
individual

Les méthodes AndTheNext() permettent de valoriser les éléments suivants dans la liste.

On peut appliquer des méthodes sur les objets créés :

1: var toCreate = Builder

2: .CreateListOfSize(10)

3: .WhereTheFirst(5)

4: .Have(i => i.Birthday = new DateTime(1978, 1, 24))

5: .HaveDoneToThem(i => i.Emails.Add(Builder.CreateNew().Build()));

6: var data = toCreate.Build();

ou choisir un élément au hasard :

1: HaveDoneToThem(i => i.Emails.Add(Pick.RandomItemFrom(emails)))

Le objets peuvent être persistés (par exemple dans le cas de test d’intégration via la couche de persistance de l’application) :

1: BuilderSetup.SetCreatePersistenceMethod(repositoryIndividual.Save);

2: var data = toCreate.Persist();

une API spécifique aux dates existe :

1: var arriveeQuebec = The.Year(2009).On.May.The1st.At(15, 00);

2: //ou par génération

3: .Have(i => i.Birthday = generator.Next(March.The10th,April.The17th))

Enfin lors de la configuration le framework nous laisse spécifier une classe de PropertyNaming  pour un type donné ou pour l’ensemble des appels.

billet publié dans les rubriques coding le