摘要:屬性封裝的好處
很多人大概都很疑問屬性封裝到底能幹嘛...還要多花時間去寫程式碼出來,
而對我最的好處就是能透過屬性封裝解決屬性邏輯上的過濾。
例如當我們對一個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來直接存取,而且都受到時間限制的
規範嚕