Something i Want
如果你經常重構的話,那麼你會發現Extract Method是一個常用的方法,並且隨著你不斷的Extract
Method,漸漸的你的代碼種就會浮現出Template Method模式。
以下就是一個Template Method的樣本
abstract class CheckBackground
{
protected abstract void CheckBank();
protected abstract void CheckCredit();
protected abstract void CheckLoan();
protected abstract void CheckStock();
protected abstract void CheckIncome();
//work as template method
public void Check()
{
CheckBank();
CheckCredit();
CheckLoan();
CheckStock();
CheckIncome();
}
}
用abstract class來實現Template Method是一種比較好的方法,但是相對於abstract class而言interface是更常用的定義contract的方式。但是interface卻要求所有的方法都是public,而Template Method中包含的其他方法往往是private和protected的。
那麼我就希望有一種機制可以保證Template Method能夠被安全的實現。
利用constains關鍵字來定義某個方法中需要包含的方法以及它們出現的順序
constains CheckConstains
{
void CheckBank();
void CheckCredit();
void CheckLoan();
void CheckStock();
void CheckIncome();
}
public interface ICheckBackground
{
[CheckConstains]
void Check();
}
作為程式員,在編程的時候最怕的是要記住某些上下文,才能把代碼正確的寫出來,這樣是很不可靠的。
我們當然希望在編程的時候需要記住的東西越少越好,而Template Method模式的應用又是如此的廣泛,所以我覺得需要以上這種約束, 這樣在以後為ICheckBackground添加新的實現的時候就不會出問題了。