igouist.github.io/post/2020/07/oo-7-interface/
1 Users
0 Comments
6 Highlights
0 Notes
Tags
Top Highlights
介面不同於前面各項特性是告訴我們物件應該有什麼特徵,而是要求我們用「不同功能的物件之間對接時,我們該怎麼處理」的角度去看待問題。
我需要的是「連線到 MySQL 取得資料」的工具嗎?並不是,只要是「能連線到資料庫、能取得資料」就好了。 我需要的是「以OOO技術替使用者建立訂單並儲存」的工具嗎?並不是,「替使用者建立訂單並儲存」才是最重要的。
因此,從介面開始設計時最重要的是釐清「我需要的是什麼」,用介面定義一份契約,把使用對象和實作銜接起來;並且把實作隔離成可替換的部件,達到解除耦合的目標
最後還是回到了關注點分離的議題:主流程、商業邏輯專心做好自己的事,他們只需要知道這個物件能夠提供拿到資料的方法就好。而實際上怎麼拿到資料,則由實作的物件內部去處理,也就是封裝的核心精神。 要理解介面的概念,訣竅在於把目光更集中在「功能」的角度。我們在理解物件的時候,可以知道冰箱是一個物件、冰櫃是一個物件、保冷袋是一個物件;但當我們在海邊釣到魚,想要找個地方保存的時候,我們需要的是冰箱嗎?是冰櫃嗎?是保冷袋嗎? 都不是,我們需要的是「能低溫保存食物的東西」而已,今天你能用冰箱從海邊運到你家也沒關係,只要你實作得出來,並且魚是新鮮的就好。於是我們把觀看物件的角度集中在它的功能上,我們針對我們的需求去定義好我們需要的功能,這就是介面。
他看你的介面就能知道如何替換,替換時對象至少要能做到哪些事,今天他接到需求是上頭覺得保冷袋太 Low 了,我們要改用冰櫃車,他也有個接口/介面去指示他修改的方向。
一些有寫過前後端銜接的,或是做過一些小工具的到這邊可能會覺得有點熟悉。例如說:程式和使用者銜接的點,叫做使用者介面;前端跟後端交換資料的 API,叫做應用程式介面。所謂的介面/接口就是這麼一回事,這裡也不例外。
Glasp is a social web highlighter that people can highlight and organize quotes and thoughts from the web, and access other like-minded people’s learning.