程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> C# >> C#入門知識 >> 空對象模式,對象模式

空對象模式,對象模式

編輯:C#入門知識

空對象模式,對象模式


  在開發業務層數據的時候,我總是擔心數據層給我返回的對象實例為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();
 }

  現在媽媽再也不用擔心我調用數據層的對象實例報空引用了,當然這種方式並不僅限於在數據層使用

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved