【渐进】延迟加载机制的简易实现(上)
2010-09-30 21:05:39 来源:WEB开发网完成了以上这些就足够完成本文的设计了。
要想真正使用,还需要先来实现一个ILoader接口:
/// <summary>
/// 好友加?器
/// </summary>
internal class UserFriendLoader : ILoader<List<long>, UserInfoEN>
{
#region ILoader<List<long>,UserInfoEN> 成员
public List<long> Load(UserInfoEN t)
{
return UserBO.GetFriendUserIdList(t.UserId);
}
#endregion
}
现在可以来尝试使用它了:
return Lazy.LazyLoader.Load<UserInfoEN, List<long>>(new Lazy.UserFriendLoader(), this, "FriendUserIdList");
using (new Lazy.NotLazyScope())
{
//...
}
上面的代码完成了这个简易设计,能方便的让你在现有项目中引入这个机制而不用做大幅度改动。不过对于上述设计所提供的调用,可能会让您觉得使用起来比较麻烦,或许您更倾向于简单的使用类似特性的语法对属性进行延迟加载的声明,在接下来的篇幅将一步步尝试对设计进行改造,让它的调用更友好,设计更合理。
从延迟机制的实现衍生:您可能会注意到上述实现中,对于延迟加载的属性,当实际加载被执行一次后,便无需再次执行就直接从缓存中获得,基于此可衍生出一个缓存机制,如果您熟悉NHibernate,想必会联想到NH的多级缓存设计,对了,这里便暗合了这种设计,只不过现在这个机制不是基于数据库了,从这个缓存出发,便可扩展出延迟加载机制的一级缓存。
出处:http://wsky.cnblogs.com/
- ››延迟着色〔1〕
- ››延迟着色(2)
- ››加载XX.dll时出错的一般解决方法
更多精彩
赞助商链接