泛型有什麼好處就這裡就不介紹,因為網上有更多詳盡的資料。下面看一下相關情況的類結構圖:
以上是制定業務處理的基礎規則結構圖,裡面分別描述了基於泛型的查詢基礎規則(QueryAdapterAs)和不基於泛型的查詢基礎規則(QueryAdapter);兩者完成的功能都是對IFilter描述資訊進行資料查詢。
使用代碼:
QueryAdapter query = new QueryAdapter();
CategoryFilter filter = new CategoryFilter();
filter.CategoryName = textBox1.Text;
query.Filter = filter;
query.Execute();
QueryAdapterAs<CategoryFilter> queryas = new QueryAdapterAs<CategoryFilter>();
queryas.Filter.CategoryName = textBox1.Text;
query.Execute();
從使用方便性上QueryAdapterAs要比QueryAdapter方便,更重要的一個問題就是QueryAdapterAs在定義時就必須提供相關相關Filter資訊,雖然QueryAdapter可以通過建構函式來約束必須提供Filter對象;但由於IFilter只能體現自有資訊,在操作訪問實現者成員時很不方便。
除了面對以上使用問題外,還要有擴充的問題:
class CategoryQuery:QueryAdapter
{
}
當需要從QueryAdapter派生出新的查詢類來完成更具體功能時問題就來了,按道理CategoryQuery的Filter必須相關的對象資訊,但是Filter成員確以IFilter的方式體現;就是說使用者完全可以設定其他的Filter對象(會產生什麼問題大家也能相到)。
通過泛型就能解決這隱形問題,因為在派生時就已經明確相關Filter具體類型;由於使用規則明確,使用者就沒有機會犯那種錯誤。
class CategoryQuery:QueryAdapterAs<CategoryFilter>
{
}
雖然以上描述的問題不需要泛型也能解決,但泛型提供更方便高效的方式;既然這樣我們沒有理由不去採用她。