Overblog
Editer l'article Suivre ce blog Administration + Créer mon blog

Une DAO générique avec VS2005 et le framework CASTLE

27 Février 2006 , Rédigé par Hugues MEUNIER Publié dans #.NET

Les genrics dans .NET 2.0 permettent de factoriser le code; parfois de façon spectaculaire.

Par exemple, un DAO expose les méthodes CRUD pour accéder aux classes métier. En général,

il faut écrire une classe DAO par entité métier.

Avec les générics, c'est fini :

 

///*********************************************************************************************************

///Classe DAOGeneric

///*********************************************************************************************************

///Classe utilisant Hibernate, Castle(Active Record) pour la persistance

using System;

using System.Collections.Generic;

using System.Text;

using Appliref.domain;

using Castle.ActiveRecord;

using Castle.ActiveRecord.Queries;

using NHibernate;

namespace Appliref.Dao

{

public class daoGenerics<T,U,V>

{

 

public daoGenerics()

{

}

///

///Recherche un objet par clé

 

 

 

public T getObject(U ID)

{

return ((T)(ActiveRecordMediator.FindByPrimaryKey(typeof(T), ID)));

}

///

///Récupère la collection d'un type donné

public T[] getObjects()

{

return ((T[])(ActiveRecordMediator.FindAll(typeof(T))));

}

///

///Supprime un objet

///

public bool deleteObject(T objet)

{

 

try

 

 

 

 

 

{

ActiveRecordMediator.Delete(objet);

return true;

}

catch (Exception e)

{

return false;

}

}

///

///Vide une table

///

public bool deleteAllObjects()

{

try

 

 

 

 

 

{

ActiveRecordMediator.DeleteAll(typeof(T));

return true;

}

catch (Exception e)

{

return false;

}

}

 ///

///Mise à jour d'un objet

///

public T updateObject(T objet)

{

try

 

 

 

 

 

{

ActiveRecordMediator.Save(objet);

return objet;

}

catch(Exception e)

{

return default(T);

}

 

}

///

///Création d'un nouvel objet

///

public T newObject(T objet)

{

try

 

 

 

 

 

{

ActiveRecordMediator.Create(objet);

return objet;

}

catch (Exception e)

{

return default(T);

}

}

///

///Exécute une requête de sélection (HQL)

public V[] executeQuery(SimpleQuery q)

{

return (V[])ActiveRecordMediator.ExecuteQuery(q);

}

}

}

 

 

 

 

 

 

Partager cet article
Repost0
Pour être informé des derniers articles, inscrivez vous :
Commenter cet article