Dot-Net

什麼時候需要介面?

  • February 20, 2009

(在 .NET 的上下文中,它的價值是什麼)

我傾向於不使用繼承,也很少使用介面。我遇到了一個認為介面是自吐槽以來最好的東西的人。他到處使用它們。我不明白這一點,因此接下來的問題。我只是想檢查一下我對介面的理解。

如果您在任何地方都使用界面,我假設您可以預測未來,您的應用程序需求已確定並且您的應用程序不會發生任何變化。對我來說,尤其是在早期開發過程中,界面成為了拖累。該應用程序在其生命週期中非常動態。如果您需要在界面中減去或添加成員,很多東西都會中斷。上面的人說他創建了另一個介面來處理新成員。什麼都沒有。

不是組合嗎?為什麼不使用沒有介面的組合?更靈活。

他如何處理必須從介面中減去成員的情況?基本上他不會。事情剛剛破裂,這很好,因為現在您可以看到所有受影響的區域並修復它們。我們不應該更優雅地找出所有相關程式碼路徑的位置,而應該通過蠻力撕掉部分類?

我將軟體應用程序視為圖形。完整圖是最壞的情況,具有 n(n-1)/2。這意味著每個班級都與每個班級交談。令人困惑的蜘蛛網。n-1 是最好的,其中它們是嚴格的通信等級。添加另一個介面只是為了補償一個新的需要的成員,會在圖中添加一個頂點,這意味著更多的邊和更強的 n(n-1)/2 方程的實現。沒有介面的組合更像是 mixin。只有選擇類使用特定的方法。使用介面,所有類都被迫使用成員,即使它們不需要它們。組合/混合方法不會添加新的不需要的邊緣。

介面不強制類使用方法。他們強制實現類來實現所有方法,但那是另一回事。

我喜歡介面將 API 從實現中分離出來的方式。誠然,這也可以通過訪問修飾符完成,但介面使其更清晰。更重要的是,介面還使模擬變得更容易——這意味著您甚至可以在實現介面之前對依賴於介面的類進行單元測試。

是的,這意味著我經常會得到一個只有一個生產實現的介面。在我看來這不是問題,因為我已經獲得了可測試性。

另一方面,我不會為每個類都寫一個介面。我喜歡編寫對象本質上提供服務的介面——身份驗證、數據訪問等。普通數據對象(即使具有重要行為)在介面、IME 方面沒有那麼有用。

引用自:https://stackoverflow.com/questions/570302