假設您的軟件包使用某種RESTful服務,並且可以與兩個不同的PHP HTTP客戶端一起使用:guzzle/guzzle以及kriswallsmith/Buzz。因爲它使用適配器和接口。如何製作具有可選依賴項的Symfony 2包?
如何將此依賴項定義爲可選項?你會做這樣的事情,例如在編譯器通行證?
if(!is_file('/path/to/guzzle') && !is_file('/path/to/buzz')) {
throw new \RuntimeException('You need to install guzzle or Buzz browser.');
}
這是爲包定義可選依賴項的正確方法嗎?
我想強調這種選擇的有用性質疑。沒有HTTP客戶端,你的模塊可能無法工作,所以這兩種依賴關係都不是真正的可選項。您至少需要解析一個依賴項。 – Sven
謝謝。正如@Sven所建議的那樣,該包至少需要一個依賴項。如果你在這方面考慮得更好,爲什麼你會強迫用戶安裝 - 比如說大嘴 - 如果他已經發出嗡嗡聲並且該包可以與後者一起工作?無論如何,我會去配置的方式,傳遞服務(瀏覽器),並與instanceof運營商檢查它。 – gremo
你的庫顯然不支持我選擇的HTTP客戶端,所以我必須安裝你的任何一個依賴項。哪一個應該是,爲什麼?我不會擴展您的圖書館來使用我的圖書館,我也不會進入研究模式,以瞭解您建議的哪些客戶更好。我甚至不會爲你的圖書館爲什麼比另一個客戶更喜歡一個客戶的細節而煩惱。但是我仍然可以選擇製作,但它並不適用於開箱即用。底線:我質疑用戶選擇的有用性,但討論它意味着討論你的圖書館設計決策。 – Sven