2012-01-23 37 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

我会选择两项。这将为最终用途提供最大的灵活性,并能够更有效地回应流媒体问题。

相关问题