以下兩個語句是依賴倒置原則(DIP)的核心:「高層模塊不應該依賴於低級別的模塊都應該依賴於抽象。」依賴倒置原則的第二條語句闡述
「抽象不應該依賴細節,細節應該取決於抽象。」
我讀過不同的書籍和關於DIP的文章;他們都解釋了第一個陳述,但沒有一個解釋第二個陳述:「抽象不應該取決於細節,細節應該取決於抽象」。請解釋第二條陳述的意義究竟是什麼。
以下兩個語句是依賴倒置原則(DIP)的核心:「高層模塊不應該依賴於低級別的模塊都應該依賴於抽象。」依賴倒置原則的第二條語句闡述
「抽象不應該依賴細節,細節應該取決於抽象。」
我讀過不同的書籍和關於DIP的文章;他們都解釋了第一個陳述,但沒有一個解釋第二個陳述:「抽象不應該取決於細節,細節應該取決於抽象」。請解釋第二條陳述的意義究竟是什麼。
這只是意味着你不想僅僅因爲細節已經改變而改變抽象,因爲細節可能會改變。
由於高級模塊和低級模塊都依賴於抽象,所以只要細節發生變化,它們也必須更改。這顯然是不可取的。
您應該將「細節」看作「實現」: - 如果聲明某個接口,則不依賴於其未來的實現類。另一方面,實現類應該引用它們的接口並實現它的方法,所以它們依賴於它。
不要決定接口(抽象)通過先看實現(詳細)首先。
例如你可以定義一個Repository接口。但在設計Repository接口時,您不應通過查看諸如SQL實現或NoSQL實現(詳細信息)等特定解決方案來確定接口(抽象)。
讓存儲庫接口是通用的,SQL功能或NoSQL功能實現應該是特定的。
,如果你這個article通過Martin Fowler的
切換出庫爲不同的存儲機制來讀,你會得到清晰關於第二個語句,有一個在它的界面沒有SQL提及,所以我們可以使用內存中的解決方案,NoSql解決方案或RESTful服務。
第二部分是關於泄漏抽象。要成爲一個很好的抽象,它不應該泄漏實現細節。 – Steven