你的位置:首页 > ASP.net教程

[ASP.net教程]空对象模式


  在开发业务层数据的时候,我总是担心数据层给我返回的对象实例为null。

  所以,每次使用数据层返回的对象实例我都要判断下是否为null

 UserRepository respository = new UserRepository(); var user = respository.GetById("008"); if (user!=null) {   user.SayHello(); }

   虽然这样是避免了因为空值引发异常的问题,但是这样增加了客户端代码的很多工作量,而且一旦某个地方忘记判断,我的代码就会出现空异常;为了解决这个问题,我们引入了空对象模式,将空对象扼杀在数据的源头

  public interface IUser  {    void SayHello();  }

  public class User : IUser  {    public string Id { get; private set; }    public User(string id)    {      Id = id;    }    public void SayHello()    {      Console.WriteLine("{0}:Hello", Id);    }  }

  public class NullUser : IUser  {    public void SayHello()    {      //对于空对象实例来说,它的任何方法都应该不用做任何处理    }  }

  public class UserRepository  {    private ICollection<User> users;    public UserRepository()    {      users = new List<User>() {        new User("001"),        new User("002"),        new User("003"),        new User("004"),        new User("005")      };    }    public IUser GetById(string userId)    {      IUser user = users.SingleOrDefault(s => s.Id == userId);      if (user == null)//检查User的实例是否为null,如果是返回一个特殊的Iuser      {        user = new NullUser();      }      return user;    }  }

  在上面的代码中,我们在数据层中直接就判断了user实例是不是为null,如果为null,就返回一个用作null值处理的对象实例

 static void Main(string[] args) {   UserRepository respository = new UserRepository();   var user = respository.GetById("008");   user.SayHello();   user = respository.GetById("003");   user.SayHello();   Console.ReadLine(); }

  现在妈妈再也不用担心我调用数据层的对象实例报空引用了,当然这种方式并不仅限于在数据层使用

深圳去帕劳旅游报价办理帕劳旅游签证跟团帕劳旅游需要多少钱深圳到斐济旅游深圳去斐济旅游报价峨眉山金顶索道价格 黄龙最佳旅游时间 峨眉山双桥清音 稻城亚丁旅游禁忌 九寨沟藏情 九寨沟雪峰 夏季去峨眉山穿衣指南 九寨沟塔葬习俗介绍 香港尖沙咀海港城怎么去? 香港凌霄阁怎么去? 香港尖沙咀有哪些好的购物点? 香港元朗商场区在哪里?香港元朗商场区怎么去? 三亚大、小东海相离远不远? 丽江的主要景点是什么?丽江因为什么而出名的? 情侣旅游度假需要注意什么问题? 三亚小东海在哪?怎么去? SML-LX1106USBC-TR Datasheet SML-LX1106USBC-TR Datasheet SML-LX1110SOC-ATR Datasheet SML-LX1110SOC-ATR Datasheet SML-LX1110SOC-BTR Datasheet SML-LX1110SOC-BTR Datasheet 北京纯玩五日游 北京纯玩五日游 北京纯玩五日游 到北京旅游 到北京旅游 到北京旅游 深圳去北京旅游报价 深圳去北京旅游报价 深圳去北京旅游报价