2010-08-05 56 views
8

我的團隊通過在一個使用homebaked DI容器的PHP項目中實現依賴注入來混淆視圖。我們對DI的第一次迭代可能已經到了極點,甚至有例外被注入到依賴於它們的類中。實施依賴注入時,應該注入異常嗎?

這是一個很好的做法還是矯枉過正?

回答

9

依賴注入的目的是顛倒獲取依賴關係的責任,依賴關係是對象使用的協作者,以促進配置或協作行爲。

一般而言,例外情況是給定類別的合同固有的。也就是說,異常是組件在隱性或顯性合同中的一個組成部分,在發生故障時該組件如何行爲,因此不適合用衍生工具切換。事件通常也不會有行爲,因此爲了測試隔離的目的而抽象它們也不是特別有價值的。此外,因爲事件通常僅表示故障狀態或事件,所以能夠注入異常的衍生物也不是特別有價值,因爲組件的任何消費者需要針對基本異常合約進行編碼(即,任何附加屬性不會可見)。

也許你可能要注入的異常,如用,異常處理組件,它記錄後,重新拋出包裝等異常的設計幾個正當的理由,或者是在異常的建設本身需要外部資源才能實現(雖然這種需求本身會讓我停下來),但總的來說,我不會說你應該將組件本身的錯誤狀態報告解耦。

+0

作爲一個總是想知道細節(無論多麼微小)的人,這是一個很好的答案! – 2013-06-26 00:41:09

+0

另外,在PHP例外中,指向創建它們的行,而不是引發它們的行。所以注入它們會讓它們指向創建異常的DI容器中的行,這可能不是你想要的:)資料來源:http://php.net/manual/en/class.exception.php – acidtv 2016-08-09 07:21:44

4

這聽起來像是一種過度殺傷力。

當引發異常時,它應該通過它的消息和類型提供某種有用的信息。

如果您要注入Exception類來使用,這意味着Exception的類型不再有用,可以找出問題的真正含義(因爲您注入該類型後就知道該類型)。

+2

那麼是允許類與單元測試時拋出可接受的折衷的異常耦合? – DRock 2010-08-05 17:32:24