2011年11月16日 星期三

應避免使用全域變數(Global variable)

全域變數(Global variable), 是很好用, 避免使用全域變數從軟體工程的角度來看, 應該是可以降低這些底層的副程式們的耦合力(Coupling), 有助於提升副程式們在其他的個案下被重用(Reuse)的機會.

舉例: 假設 database 的 adodb.connection 是一個全域變數, 所以我在寫副程式時, 就直接存取 conn, 副程式名稱: getFieldFromTable(...)
假設, 現在有一個案子, 要同時使用了2個 connection, 這個副程式馬上就不能用了, 因為他固定存取 conn 這一個 connection.

結論1: 建議把 connection 當作參數傳進副程式裡.
結論2: 就如同 session 一樣, 只在盡量是在主程式裡使用 全域變數, 盡量在底層的副程式裡少用 全域變數 .

有一個情況, 假設您的畫面裡, 有超級多的欄位(可能20~50個欄位), 要一一把參數放到副程式裡會很辛苦, 建議您自訂一個物件(class 或 Xml Dom object) 來當作副程式間參數傳遞用, 以避免呼叫一個副程式時, 要打很多字(或很多欄名,變數名).


附註: 這個觀念, 並不適用於所有的個案與情況, 我所說的, 所寫的也不一定正確, 僅供參考.


內聚力(Cohesion)與耦合力(Coupling)似乎已經是個系統設計的必考題,也是很基本的概念。但是在實際在系統設計上卻常被遺忘與忽略,如果在設計複雜與高度擴充的系統時,保持這樣的理念將會提高系統的維護與重用性 (Reusable)。這個原則是相當重要的參考依據,身為系統設計與開發人員,銘記在心是必要的。

沒有留言:

張貼留言

Facebook 留言板