everything else, photos

Little Italie

Nous avons fait un petit tour dans le quartier italien de Montréal, une des communautés les plus anciennes de la ville. Un quartier agréable avec pas mal de cafés italiens remplis d’habitués et quelques restaurants agréables avec terrasse.  Voici quelques photos de notre promenade :

little italy 004

little italy 007

little italy 009

little italy 011

little italy 013

Par défaut
everything else

Humidité

Avec les gros orages  de la nuit et la pluie tombée avec, l’humidité ce matin était très élevée (plus de 80 %). Et cela ne s’arrange pas, comme on le voit avec ses gros nuages menaçants.

photo des uages

Tous les québecois nous rassure toutefois, c ‘est un des étés les plus mauvais qu’ils aient connus !

Par défaut
photos

stream

le pot de fleurs
stream
Originally uploaded by MatthieuGD

On en a pas l’occassion cette année car nous n’avions pas encore « de chez nous » au printemps mais Montréal était très fleurie au mois de Mai quand nous sommes arrivés. Il est organisé un nettoyage de printemps chaque année après l’hiver. On enlève les papiers, emballages ensevelis sous la neige et on plante de nouvelles fleurs. Nous n’avons pas de jardin mais la co-propriéte s’occupe au moins du bac autour de l’arbre devant notre condo.

Par défaut
coding

Fluent NHibernate

Je suis en train de travailler sur une application utilisant NHibernate, et cela me permet d’utiliser la librairie Fluent NHibernate. Cette dernière qui a reçu beaucoup d’attention cer derniers mois (voir le volume de questions sur Stackoverflow)  se propose de simplifier la configuration du mapping avec une API se basant sur le principe de l’interface “fluent” (i.e. lisible) par le biais du chaînage des méthodes. Voici un exemple de configuraton classique NHIbernate sous la forme XML :

 <hibernate-mapping xmlns="urn:nhibernate-mapping-2.2" default-access="">
<class name="ContactPoint" table="`ContactPoint`" xmlns="urn:nhibernate-mapping-2.2">

   <id name="Id" type="Guid" column="Id">

    <generator class="guid.comb" />

   </id>

   <many-to-one name="Contact">

    <column name="ContactId" />

   </many-to-one>

   <many-to-one name="Location">

    <column name="LookupLocationId" />

   </many-to-one>

   <many-to-one name="Rank">

    <column name="LookupRankId" />

   </many-to-one>

     <joined-subclass name="Address">

     <key column="Id" />

     <property name="PostalCode" type="String"><column name="PostalCode" /></property>

     <property name="City" type="String"><column name="City" /></property>

     <many-to-one name="Usage"><column name="LookupUsagekId" /></many-to-one>

     <many-to-one name="Region" column="RegionId" />

     <many-to-one name="Country" column="CountryId" />

     </joined-subclass>  
  </class>

Voici le même mapping avec Fluent NHibernate :

public class ContactPointMapping : ClassMap
{
    public ContactPointMapping()
    {
        Id(x => x.Id);

        References(x => x.Contact).WithColumns("ContactId");

        References(x => x.Location).WithColumns("LookupLocationId");
        References(x => x.Rank).WithColumns("LookupRankId");

        JoinedSubClass("Id", EmailAsJoinedSubClass());
        JoinedSubClass("Id",PhoneAsJoinedSubClass());
        JoinedSubClass("Id", AddressAsJoinedSubClass());
        JoinedSubClass("Id", WebSiteAsJoinedSubClass());
    }

    public static Action<joinedSubClassPart
> AddressAsJoinedSubClass() { return sub => { sub.References(x => x.Usage).WithColumns("LookupUsagekId"); sub.Map(x => x.PostalCode); sub.Map(x => x.City); sub.References(x => x.Region).ColumnName("RegionId"); sub.References(x => x.Country).ColumnName("CountryId"); }; } }

Il y a quelques temps un projet associé de NH proposait d’exprimer la même chose via des attributes C#. Cela permettait d’avoir un mapping plus proche i.e. de ne pas avoir à ouvrir un fichier externe tout en offrant un typage fort plus sûr que la forme textuelle du XML. Cetains reprochaient à cette approche l’intrusion, même minimale, de NH dans les objets du domaine.

Je trouve en Fluent Nhibernate une bonne alternative. Le mapping est proche (dans le code sans être dans le domaine), avec un typage fort grâce aux expressions lambda. Il reste quelques limitations mais son utilisation est assez intuitive et très productive.

Par défaut