紧密耦合的课程:在我的情况下什么是更好的设计

时间:2012-01-23 16:40:44

标签: java tightly-coupled-code

在我的情况下,什么是更好的解决方案,如何设计类以使它们不是很耦合?

我有一个库(API),它提供了一些功能(例如,使用subscribe方法订阅流媒体外汇价格)。我有一个API客户端,告诉API它想要获得哪些价格。 API使用方法SubscriptionStatus为某些界面(例如SubscribeSuccess(Subscription) and SubscribeFailed(Subscription))提供反馈。在API客户端中,我有一个活动订阅列表(List<Subscription> activeSubscriptions)。我希望API客户端只对订阅成功做出反应(只需将订阅添加到列表中)。在其他情况下 - 只需打印消息即可记录。 组织Subscription监听器和API客户端之间关系的最佳方法是什么? 选项可以是:

  1. 将API客户端实例传递给订阅侦听器,以便它可以调用apiClient.addSubscription(subscription)
  2. API客户端实现实现SubscriptionStatus接口并管理这些事件(失败,内部成功:activeSubscriptions.add(订阅))。反对:有很多类型的动作,每个动作都有它自己的倾听者。所以Api客户端真的很大。
  3. 使用一个方法SubscriptionSuccess(subscription)定义自己的接口,让API客户端实现它?
  4. 您的选择?
  5. 对主题的任何想法都表示赞赏!

    谢谢!

2 个答案:

答案 0 :(得分:1)

我会选择第2选项。如果SubscriptionStatus接口非常大,并且您知道某些客户端只想实现其中的一部分,那么您可以提供一个基本的空超类,并让客户端扩展它(使其abstract强制使用它们)

BaseSubscriptionStatus这样的东西,它对所有方法都有空实现,让用户覆盖它想要的那些。另一种选择是

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

表示每个基本方法,而不是空实现。

当然,您可以保留SubscriptionStatus接口以获得正确的依赖注入和可测试性,只有让BaseSubscriptionStatus实现它。

答案 1 :(得分:0)

我会选择选项二。这将使最终使用最灵活,并能够在他们的情况下更有效地响应流媒体的问题。