通常我會把我的標準/ hql查詢放入與實體相關的存儲庫/ dal類中,但最近我一直在考慮添加另一個表示查詢的抽象,這會給我在基類中的所有查詢(例如分頁)中添加普通行爲的可能性等。建模NHibernate查詢
所以這些是我現在的組件;
通用接口不相關的NHibernate:
public interface IQuery<T>
{
IList<T> List();
T Single();
}
例實施基於標準的查詢,也可能出現相似的HQL查詢,或NHibernate的,LINQ查詢
public abstract class CriteriaQuery<T>: IQuery<T>
{
[Inject]
public ISessionFactory SessionFactory { protected get; set; }
protected ISession Session
{
get { return SessionFactory.GetCurrentSession(); }
}
protected abstract ICriteria Configure(ICriteria criteria);
[Transaction]
public virtual IList<T> List()
{
var criteria = Session.CreateCriteria(typeof (T));
return Configure(criteria)
.List<T>();
}
[Transaction]
public virtual T Single()
{
return Configure(Session.CreateCriteria(typeof(T)))
.UniqueResult<T>();
}
}
並做了什麼這裏一個特定領域的查詢將如下所示:
public interface IGetVideosQuery: IQuery<Video>
{
IGetVideosQuery Page(int index);
IGetVideosQuery PageSize(int pageSize);
IGetVideosQuery AllTime { get; }
IGetVideosQuery Today { get; }
IGetVideosQuery LastWeek { get; }
}
任何對此有何想法?您可能遇到的問題可能會遇到? 謝謝!
查看Fabio Maulo的「增強型」查詢對象,查看某個相關的結構:http://fabiomaulo.blogspot.com/2010/07/enhanced-query-object.html – DanP 2010-10-25 12:34:29
@danp:謝謝! – 2010-10-25 12:43:43