2014年1月27日 星期一

Xcode 5 有更好的封裝引導

有 API / Framework 設計經驗的人應該都了解一個原則:

公開的部分愈少愈好。

以 Java 來說, interface 中宣告的 methods 就象徵 API/Framework 提供者的承諾;在 C / Objective-C 來說,header 檔中的內容也同樣兼負這項責任。

換句話說,不需要提供給 API/Framework 終端使用者知道的資訊,應該封裝在別處:使用者以一般方式使用 API/Framework 時看不到的地方。

從 Xcode 4 開始,InterfaceBuilder 和 code editor 結合成了一個視窗,當程式員試圖連結 IBOutlet 或 IBAction 時,只要切換 editor 至 assistant editor,就可以看到視窗被一分為二個 view,然後透過拉線完成。這個方式實在太酷了。

這裡想討論的,是再更細的事。

當 editor 上呈現 xib 的 layout view時,開啟 assistant editor ,會發現右邊的 view 應該會自動對應到 xib 上目前正被選取的元件的 Custom Class。在 Xcode 4 ,我們會看到該類別的 .h 檔展示在右邊的 view。

為什麼是 .h (header) 檔,而不是 .m 呢?

以 IBOutlet 來說,它會被宣告成是 property。以 property 的定義來說,它的確是有提供外部元件與所屬物件互動的功能。所以,開啟 assistant editor 時把 .h 檔秀出來,似乎合道理。

不過,不是所有的 IBOutlet 都應該和外部元件互動;
而且,若要連結的是 IBAction,而 IBAction 與外部元件的互動機會可能更少,那麼宣告在 .h 曝露出去真的好嗎?

在 Xcode 5 ,切換到 assistant editor 時,預設打開的是 .m 而不是 .h了。這時程式員可以把 IBOutlet 或 IBAction 的宣告放在匿名的 category 宣告中。這是更好的資訊隱藏、更好的封裝。

我想 Xcode 的發展實在是很有想法的…。



沒有留言:

張貼留言