1. 程式人生 > >為什麼要使用介面,直接實現不就得了

為什麼要使用介面,直接實現不就得了

原文:“請只談為什麼,不要講定義,也不要講實現的方法,更不要講重大意義,前者我都懂。我只想知道,如果不用介面會發生怎樣的不
良後果等。也就是隻需要專家們告訴我“為什麼要使用介面”或“為什麼必須使用介面”,不使用介面就會如何等。
不過,我的淺顯理解是,對於大型軟體開發介面可以用少數人快速設計出框架,然後讓很多人來分頭實現。而中小型軟體的開發
可能就不需要介面設計,而是直接實現類。
請專家們指教。”

以上是有一位朋友的問題(可以在百度中搜到原帖),我曾經和他一樣,後來我發現甚至程式設計10年的人,仍然知其然不知所以然,現在我把答案傾囊相授,
希望助有緣人在進階道路一臂之力。

介面這個定義比較老生常談,那麼很多人都只知道擴充套件性好啊,多型啊...的一些好處,但是為什麼要用介面呢。


出現這個問題的根本原因,是目前你還沒達到這個專案級別高度,因為介面的定義是站在產品總監的位置他來發起的。說實際一點,我是一個
產品總監,我必須要求我的專案具有擴充套件性,容錯性,什麼意思,我手下有20多個人,每個人做一個模組,那麼我就對每個模組做
了定義了(就是介面),因為這是一個系統,一個專案,很多模組,我不可能盯著每個人直接寫介面實現,或者我不能自己寫
直接實現介面的類,如果讓下面的20個人分別寫某個模組,直接實現介面。如果某天其中一個人辭職了不幹了,我會招聘另一個人,
他只需要看我定義的介面,就能實現我要的功能模組了,而不是在離職的那個人的程式碼裡(可能有錯誤,可能有冗餘)修改。
現在大家都能理解了,介面不是留給簡單的程式設計師(碼農)來思考有什麼用的,因為介面不是給你這種簡單碼農用的,你只需要

給我實現介面就ok,介面是站在產品高度的領導者,才能發起的,他才會考慮的。那麼換位思考,我當然知道我下面的20個人,他們都想各自寫直接實現就ok。

那麼你為什麼會出現這個問題,因為你不僅充當了碼農的角色,你還扮演了整個專案的產品經理,你想把你的專案做到最優化,最好。

但是你手下還沒那麼多人,所以沒能暴露出不寫介面的麻煩。

總之一句話總結就是,介面是產品經理等站在專案一層的人發起的動作,底層的碼農必須按照介面要求進行實現,角色不同,考慮不到
不知道你們都清楚了嗎(措辭可能有些bug,請忽略)

舉個例子。
我是唐山市的市長,由於我要求我們市所有跑的車輛必須是6個輪子的車,那麼我這就要定義一個介面,所有給唐山市的生產廠家,必須


生產的車輛是6個輪子。
然後A廠就去生產了6個輪子的。
B廠生產了5個輪子的。
那麼B廠的車我就不允許來唐山市賣了,我就保證了整個唐山市的車輛都是6個輪子的。
以後可以還有很多車廠(一汽豐田,廣汽本田等)給唐山市生產車,但是必須按照我的規章,要6個輪子,才可以來我市(程式碼寫進我的專案)。規則是領導者定的。
介面是領導者為以後擴充套件定的規則。

原文中有一個評論是“
為什麼電腦主機板上還要有記憶體插槽,顯示卡插槽?多浪費機箱空間啊?
直接用電烙鐵把顯示卡和記憶體的引腳一根一根焊到主機板上不就得了。
如果你焊錯位置了,說明你焊工不好。
每次拆裝的的時候再繼續用電烙鐵。”
得到了很多小夥伴的贊同,但是這個只說出了介面存在的好處,並沒有類比到接口出生的本質。出生的本質是為了高效能,i5主機板提前制定了CPU必須是1150針,
才能插在我的主機板上,達到擴充套件的目的。

好了說了這麼多應該都清楚了,介面就一句話,領導者制定的規則。寫介面並不是為了擴充套件,而是為了擴充套件以後的模組仍然跟專案模組保持高度一致。

所以專案大小不是決定寫介面的決定性因素,決定性因素是,你要不要寫的規範,擴充套件後,還是那麼規範。

歡迎各位有緣同學指正,同時,“碼農聯盟”擴招賢能,如果你認為和我有緣,想嘗試業餘創辦一些事業,抓住現代經濟時代機遇。歡迎你的加入