2007年7月24日 星期二

C12 應付變化的設計──Design Patterns

系統設計時常有需要變化的地方,累積了多次的開發經驗後,有人統計分析出一些較常見且需要的變化,並且設計出解決對應問題的機制,這些機制被稱為Design Patterns。

Design Patterns是很熱門的話題,搜尋一下網路可以找到許多相關的網頁。Design Patterns集結了前人的智慧解決系統設計上常見的需求,讓系統更具有抽換元件的彈性,但是增加彈性的代價是使用更多的Class來達成功能。因此也有Anti-Pattern的聲浪出現,希望設計時不要動不動就套用Design Patterns而造成設計上的負擔。

在應該變化的地方才使用Design Patterns是目前較中肯的使用時機,分析使用者所有需求的內容來決定哪些地方該使用Design Patterns。這樣的想法是合理的,如同記錄的內容需要平衡,設計的內容也同樣需要平衡;但是需求都可能變更,沒有人知道現在確定不變的事在未來會不會永遠不變。

我所採用的設計原則是:確定會變的地方套用Design Pattern,有可能會變但現在不變的地方定義Interface而不使用Class。設計時定義Interface再實作所花的時間大約是直接使用Class的三倍,但是把已經寫好的直接使用Class原件拆出Interface與實作差不多要花直接使用Class的九倍時間,而且還要另外再加上重新測試的時間。

就像記錄應該記下所有的事,但是內容應該簡單不要花太多時間,在設計的時候也應該為所有應該切割的地方定義介面預留未來的改變,但是不需要全部都套用Design Pattern。

沒有留言:

張貼留言