WEB开发网
开发学院软件开发C语言 【渐进】延迟加载机制的简易实现(上) 阅读

【渐进】延迟加载机制的简易实现(上)

 2010-09-30 21:05:39 来源:WEB开发网   
核心提示: 熟悉ORM的朋友对于延迟加载一定不陌生,多数ORM框架均提供了优秀的延迟加载机制,【渐进】延迟加载机制的简易实现(上)(2),[ActiveRecord("C_Article")]publicclassArticle:ActiveRecordBase<Article&g

熟悉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 3 4 5  下一页

Tags:渐进 延迟 加载

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接