過去一週的網頁瀏覽次數

2012年2月27日 星期一

[PTT轉錄] 關於OOP和檔案開啟

我對於OOP的概念一直不敢說懂,我想沒受過正規教育可能是原因之一。

今早在PTT上看到一篇討論檔案開啟在設計上的問題,原PO希望作一個class A專門用來處理開檔,再把讀到的檔案給其他物件或東東用。然而當檔案錯誤或無法被開啟時,原PO希望A有一個防範的機制,讓後續使用這個A來讀檔的物件不要去使用這個錯誤的結果。

因此這邊提到了一個OOP的概念:一個class作一件事,就把這件事作好。

物件架構是一層一層疊架的,當底層的物件沒有作好完整的工作時,上層的物件就會出現if... else等冗碼。在回文中某位大大舉了個例子:
        A.DataTable = B.GetDataTable()
當B.GetDataTable在產生資料過程裏,有可能遇到error或空資料,很多人就會直接認為若是error,就丟null出來。結果A沒有看說明(b也沒寫),就直接接收,null reference錯誤。這是誰的錯?


文中大大的觀點認為,就算有error,B也要return一個空的table回去。然而最重要的,應該是如何讓之後的程式知道有錯誤發生??


較佳的作法應該是B在自己的class有錯誤時,throw new Exception("B已知的錯誤"),讓code在運行時有excpetion發生的機會,其他物件(包含A)在使用B的時後,自然就會知道B出錯。這是一個很重要的觀念,點破過去認為先return null,再用一堆if else判斷的寫法,有助於在OOP實戰,物件一層一層疊上去時,建立程式運作的穩定性。
因為不是每個人寫code都會去看前人有沒有寫註解阿...有時候自己寫的code年久失修,要回去翻修的時後可能也忘記當時的想法了XD