讨论:关于OOP中类属性的延迟加载

  OOP中类属性的延迟加载,这样听起来挺费解的,先看看下面的说明。

  假设有两个自定义类型A和B,用以下代码表示A与B一对一的关联关系:
public class A
{
    
// 
    private B objB;
    
public B B { get { return objB; } }
}
public class B { //  }

用以下代码表示A与B一对多的关联关系:
public class A
{
    
// 
    private IList<B> objBList;
    
public IList<B> BList { get { return objBList; } }
}

public class B { // ... }

  正常情况下,加载类A的对象时会一起加载属性B/BList的数据(PetShop 4.0是这么做的),所谓“类属性的延迟加载”就是指加载类A的对象时不加载属性B/BList的数据,而是当属性B/BList被访问是才加载相关数据。

  解释清楚了什么是“类属性的延迟加载”之后就可以讨论如何实现的问题了(这里讨论一下基于下图程序结构的实现方法)。


  上图是仿PetShop 4.0的结构设计的,只是把工厂类DALFactory放到IDAL中了。PS: BLL引用Domain、IDAL;IDAL引用Domain;XMLDAL和AccessDAL引用Domain、IDAL;Web引用BLL、IDAL、Domain,了保证程序顺利运行,还需按配置文件复制AccessDAL或XMLDAL到Bin文件夹下。

  不知道各位看贴的大侠对这种结构延迟加载的实现有什么看法?请一定回帖赐教,小弟在此谢过了!

---------------------------------------------------------------------------------------------

  下面简单说说自己的实现方法(对于上图的结构,我没想到解决方法,所以只能稍微修改了一下结构:把Domain里的实体类移到IDAL/Domain下,但保持原名称空间不变)。

  PS:BLL引用IDAL;IDAL不需要引用;XMLDAL/AccessDAL引用IDAL;WEB引用BLL、IDAL,为了保证程序顺利运行,还需按配置文件复制AccessDAL或XMLDAL到Bin文件夹下。

  CategoryInfo.cs中的部分代码:
        private CategoryInfo objParentCategoryInfo;
        
/// <summary>
        
/// 父类
        
/// </summary>
        public CategoryInfo ParentCategoryInfo
        {
            
get
            {
                
if (objParentCategoryInfo == null)
                {
                    objParentCategoryInfo 
= DALFactory.GetCategoryDAL().GetParentCategory(this);
                }

                
return objParentCategoryInfo;
            }
            
set
            {
                objParentCategoryInfo 
= value;
            }
        }


  真诚希望看贴的朋友积极参与讨论,给作为初学者的我提点建议,谢谢!
posted @ 2007-07-02 15:16  Jailu  阅读(680)  评论(1)    收藏  举报