浅谈C#中的延迟加载(2)——善用virtual

  之前的文章"浅谈C#中的延迟加载(1)——善用委托"中介绍了三层结构中在Model层对实体类的属性实现延迟加载的方法,该方法利用C#中的委托来实现,最后虽然延迟加载的目的得以实现,但是给客户端(例如UI层)暴露了不必要的属性(一个委托对象,我使用了泛型的Fun类来实现)。这篇文章介绍一种方法来隐藏这个属性,同时又可以达到延迟加载的目的,更重要的是这一切都是在之前的基础上来完成的,不需要改变原来使用到实体类的地方的代码。

  按照惯例,我们考虑一下想要我们的代码达到什么效果:首先在Model.Acticle(文章实体类)中的Category属性和原来一样,只在需要的时候通过调用委托来获取文章所属分类(Model.ArticleCategory类)。同时这个委托是不被客户端(例如UI层)代码看到的。。。设计模式中有一句话,大致的意思是通常在两个事物之间加上一个中间层,可以把事情变得简单,于是我们这样考虑,能不能加多一个中间层来实现呢?

  把Category属性定义为虚拟的(virtual),去掉委托,继承Model.Acticle类实现一个子类,把委托放到到这个子类里面来,由个子类里面去实现Category属性的get选择器,客户端访问的是一个用该子类做实例化的Model.Acticle类对象,这样一来客户端代码访问的依旧是Model.Acticle类,但是看不到用于实现延迟加载的委托却又能在Category属性中获取到需要的数据。呵呵,由于我是写文章的人,所以觉得这个思路很好理解,但是看文字的您可能感觉有点晕,下面用代码来说明应该就清楚了。

  首先我们修改Model.Acticle类,给他瘦身,瘦身结果如下:

c#代码 
// 文章实体类
  public class Article
 {
 
public int ArticleID { get; set; }
 
public string Title { get; set; }
 
public string Cotnent{ get; set; }
 
public DateTime CreateTime { get; set; }
 
public int CategoryID { get; set; }
 
// 文章所属分类
  public virtual Model.ArticleCategory Category
 {
get;
}
 }

NET技术浅谈C#中的延迟加载(2)——善用virtual,转载需保留来源!

郑重声明:本文版权归原作者所有,转载文章仅为传播更多信息之目的,如作者信息标记有误,请第一时间联系我们修改或删除,多谢。