zoukankan      html  css  js  c++  java
  • 自定义延迟加载类

    延迟加载类

     1     public class LazyLoader<TModel> where TModel:class
     2     {
     3         TModel _data;
     4         Func<TModel> _loadDataFunc = null;
     5         bool _loaded = false;
     6         public LazyLoader():this(null){ }
     7         public LazyLoader(Func<TModel> loadDataFunc) 
     8         {
     9             _loadDataFunc = loadDataFunc;
    10             _data = null;
    11             _loaded = false;
    12         }
    13         public TModel QueryData() 
    14         {
    15             if (!_loaded && _loadDataFunc != null)
    16             {
    17                 _data = _loadDataFunc();
    18             }
    19             return _data;
    20         }
    21         public void SetData(TModel value) 
    22         {
    23             _data = value;
    24             _loaded = true;
    25         }
    26     }
    LazyLoader

    使用方法(简单举列)

    比如员工菜单 可能你再使用这个员工对象的时候并不需要去加载他的菜单 当你要用的时候再加载 这时候就需要延迟加载了 

     1     public class Employee
     2     {
     3         public LazyLoader<IEnumerable<Menu>> _menus;
     4         public Employee(Guid employeeId, string employeeNo, string name, string password, string email, string phone, bool enabled,  bool isAdministrtor, DateTime registerDate, string remark, string ipLimitation)
     5         {
     6             EmployeeId = employeeId;
     7             EmployeeNo = employeeNo;
     8             Name = name;
     9             Password = password;
    10             Email = email;
    11             Phone = phone;
    12             Enabled = enabled;
    13             IsAdministrator = isAdministrtor;
    14             RegisterDate = registerDate;
    15             Remark = remark;
    16             IpLimitation = ipLimitation;
    17             _menus = new LazyLoader<IEnumerable<Menu>>(() => SystemResourceService.QueryMenusByEmployeeId(employeeId));
    18         }
    19 
    20         public Guid EmployeeId { get; private set; }
    21         public string EmployeeNo { get; private set; }
    22         public string Name { get; private set; }
    23         public string Password { get; private set; }
    24         public string Email { get; private set; }
    25         public string Phone { get; private set; }
    26         public bool Enabled { get; set; }
    27         public bool IsAdministrator { get; private set; }
    28         public DateTime RegisterDate { get; private set; }
    29         public string Remark { get; private set; }
    30         public string IpLimitation { get; set; }
    31         public object Id
    32         {
    33             get { return EmployeeId; }
    34         }
    35     }
    Employee
  • 相关阅读:
    Microsoft training Kits
    WCF Load Test
    SQL Server Central Management System
    连贯NHibernate 1.0正式发布
    C#全角和半角转换
    Silverlight 2应用所采用的WCF技术
    实用工具特别推荐 Robocopy GUI
    SmtpClient发送邮件遭遇The specified string is not in the form required for a subject.
    SQL Server 2008使用扩展事件进行高级故障排除
    Visual Studio 2010新特性
  • 原文地址:https://www.cnblogs.com/liuxiaoji/p/4477223.html
Copyright © 2011-2022 走看看