簡體   English   中英

松散耦合的依賴關系:如何?

[英]Loosely coupled dependencies: How?

如何最好地分離兩個類,但仍然使它們彼此依賴?

我有帶有類型提示的構造函數參數:

public function __construct(\namespace\Interface1 $class1,
    \namespace\Interface2 $class2,
    \other\namespace\Abstract1 $class3){

但這與說的話緊密相關嗎?

new \namespace\Class1();

任何其他方法都歡迎。

使用接口意味着您與實現分離。

您必須至少與某些組件耦合才能使用其他組件(即依賴項)。 問題是如何最小化這種耦合:

  • 自己實例化依賴關系意味着將其耦合到該類,該類的構造函數以及依賴關系的所有子依賴關系。 那是非常糟糕的。
  • 要求/類型提示(在構造函數參數中)特定類的對象意味着您已與該類緊密耦合。 如果您想更改班級,那將很麻煩。 這不好。
  • 需要/類型提示一個實現接口的對象意味着您只能將自己耦合到該接口。 這意味着您可以對該接口進行任何實現。 很好,您並沒有非常依賴於依賴項,只需要一個可以執行X的對象(X是接口定義的協定)。

最后,那就是選擇涉及較少耦合的解決方案。

一種替代方法是使用事件:您的類可以引發事件,並讓依賴項偵聽這些事件。 這樣,您的類僅耦合到EventManager的接口。

但是事件解決方案並不能真正適合所有用例:您不能保證有人實際注冊了該事件,並且實際上對該事件做了任何事情。 而且,您無法像調用方法一樣獲得返回的結果。

結論:使用像您一樣的界面是好的,這里沒有問題。 :)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM