【渐进】延迟加载机制的简易实现(上)
2010-09-30 21:05:39 来源:WEB开发网熟悉ORM的朋友对于延迟加载一定不陌生,多数ORM框架均提供了优秀的延迟加载机制。
[ActiveRecord("C_Article")]
public class Article : ActiveRecordBase<Article>
{
[HasMany(typeof(Tag), Lazy = true)]
public IList TagList { get; set; }
}
using (new SessionScope())
{
Article article = Article.Find(1);
Response.Write(article.TagList.Count);
}
上述代码利用Castel的ActiveRecord框架展示了一个延迟加载的调用方式:一个特性(HasMany),一个范围声明(SessionScope),就完成了加载,这就是本文将尝试的设计。本文将先尝试以较简易的方式实现以便它可以立刻开始工作,后续篇幅将逐步完善这个设计。
设计之前,先确定一下将要设计的机制的大致使用:不使用代理,AOP等思想对原有类做拦截,不引入特性做为标记,当用户需要使用延迟加载的属性时,需在当前代码上下文声明一个非延迟加载区域,形如SessionScope。
首先,这里所设计的机制不同于ORM框架,这里的数据并非源于数据库,所以将由用户来实现正常的数据加载接口:
/// <summary>
/// 加载接口
/// </summary>
/// <typeparam name="TOut">加载的类型</typeparam>
/// <typeparam name="TIn">启用此加载的对载类型</typeparam>
public interface ILoader<TOut, TIn>
{
/// <summary>
/// 正常加载
/// </summary>
/// <param name="t"></param>
/// <returns></returns>
TOut Load(TIn t);
}
- ››延迟着色〔1〕
- ››延迟着色(2)
- ››加载XX.dll时出错的一般解决方法
更多精彩
赞助商链接