2012-01-23 38 views
1

在我的情況下,什麼是更好的解決方案,如何設計類,使它們不是很耦合?緊密耦合的類:什麼是我的情況下更好的設計

我有一個庫(API),它提供了一些功能(例如,使用subscribe方法訂閱流式FX價格)。我有一個API客戶端,告訴API它想要獲得哪個價格。 API通過一些接口(例如SubscriptionStatus)提供反饋,並使用方法SubscribeSuccess(Subscription) and SubscribeFailed(Subscription)。在API客戶端中,我有一個活動訂閱列表(List<Subscription> activeSubscriptions)。我希望API客戶端只對訂閱成功做出反應(只需將訂閱添加到列表中)。在其他情況下 - 只需將消息打印到日誌。 組織訂閱監聽器和API客戶端之間關係的最佳方式是什麼? 選項可能是:

  1. 通API客戶端實例的訂閱偵聽器,以便它可以調用apiClient.addSubscription(subscription)
  2. API客戶端中實現實施SubscriptionStatus接口和管理這些事件(失敗,成功的內部:activeSubscriptions.add(訂閱)) 。 Contra:有很多類型的動作,每個動作都有它自己的偵聽器。所以Api Client將會是非常大的類。
  3. 用一種方法定義自己的接口SubscriptionSuccess(subscription)並讓API客戶端實現它?
  4. 您的選擇?

關於主題的任何想法,感激!

謝謝!

回答

1

我會去選項2,抓住。如果SubscriptionStatus界面真的很大,而且你知道有些客戶只想實現其中的一部分,你可以提供一個基本的空超類,並讓你的客戶擴展它(使其強制abstractBaseSubscriptionStatus對所有方法都有空的實現,並讓用戶覆蓋它想要的。另一個選項是

throw UnsupportedOperationException("This method is not supported by your implementation of SubscriptionStatus. Please override it"); 

對於每個基本方法而不是空實現。

當然,您可以保留SubscriptionStatus接口以進行適當的依賴注入和可測試性,只有使BaseSubscriptionStatus可以實現它。

0

我會選擇兩項。這將爲最終用途提供最大的靈活性,並能夠更有效地迴應流媒體問題。

相關問題