屬性封裝的好處

  • 1220
  • 0
  • C#
  • 2013-08-22

摘要:屬性封裝的好處

很多人大概都很疑問屬性封裝到底能幹嘛...還要多花時間去寫程式碼出來,

 

而對我最的好處就是能透過屬性封裝解決屬性邏輯上的過濾。

 

例如當我們對一個API取資料時,會丟入開始時間參數(startDay)和結束時間參數(endDay),例如:


public List GetData1(DateTime startDay,DateTime endDay){
  實作....
}

public List GetData2(DateTime startDay,DateTime endDay){
  實作....
}


public List GetData3(DateTime startDay,DateTime endDay){
  實作....
}

 

我們可能有多個基於startDay跟endDay的方法,一開始這似乎沒什麼大礙,

 

可是問題來了,若我們這個API開始需要限制startDay只能取到一年以前的資料,

 

而且endDay只能取到某天前的資料呢?

 

這時開始出現問題了,因為這意味著我們必須在三個實作的方法中加入限制,如下:

 


public List GetData1(DateTime startDay,DateTime endDay){
    if(startDay.....)
  實作....
}

public List GetData2(DateTime startDay,DateTime endDay){
    if(startDay.....)
  實作....
}


public List GetData3(DateTime startDay,DateTime endDay){
    if(startDay.....)
  實作....
}

作業方式開始繁瑣了,可以想像當程式碼一多起來時,你就必須在各個地方添加限制,而且還不能漏掉。

可是當封裝屬性後?

private  DateTime  _startDay
private  DateTime  _endDay

     public DateTime startDay
        {
 
            get { return _startDay; }
 
            set
            {
 
                if (value < 時間限制)
                {
                    throw new ArgumentException("不能存取1年前的記錄");
                }
 
                this._startDay = value;
            }
        }

public DateTime endDay
        {
 
            get {
 
                return _endDay;
            }
 
            set
            {
              
                if (value >= 時間限制){
                    throw new ArgumentException("不能存取下個月的記錄);
                }
 
                this._endDay = value;
 
            }
        }

經由這樣實作之後,三個實作方法的startDay參數和endDay參數就可以直接拿掉,

改成可以直接使用this.startDay和this.endDay來直接存取,而且都受到時間限制的

規範嚕