밀접하게 결합된 수업:내 상황에 더 나은 디자인은 무엇입니까

StackOverflow https://stackoverflow.com/questions/8975169

  •  12-11-2019
  •  | 
  •  

문제

내 상황에서 더 나은 해결책은 무엇입니까? 클래스가 서로 많이 결합되지 않도록 디자인하는 방법은 무엇입니까?

일부 기능을 제공하는 라이브러리(API)가 있습니다(예: FX 가격 스트리밍 구독). subscribe 방법).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(구독)).대조:다양한 유형의 작업이 있으며 모든 작업에는 자체 리스너가 있습니다.그래서 Api Client는 정말 큰 클래스가 될 것입니다.
  3. 하나의 메소드로 자체 인터페이스 정의 SubscriptionSuccess(subscription) API 클라이언트가 이를 구현하도록 하시겠습니까?
  4. 당신의 선택은 무엇입니까?

주제에 대한 어떤 생각이라도 환영합니다!

감사해요!

도움이 되었습니까?

해결책

나는 캐치와 함께 옵션 2로 갈 것입니다.만약 SubscriptionStatus 인터페이스는 정말 정말 크고 일부 클라이언트는 그 중 일부만 구현하기를 원하며 기본 빈 슈퍼클래스를 제공하고 클라이언트가 이를 확장하도록 할 수 있습니다. abstract 강제로 시키려고)

다음과 같은 것 BaseSubscriptionStatus 모든 메서드에 대해 빈 구현이 있고 사용자가 원하는 메서드를 재정의할 수 있습니다.또 다른 옵션은

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

빈 구현 대신 각 기본 메소드에 대해.

물론, 당신은 유지할 수 있습니다 SubscriptionStatus 적절한 종속성 주입 및 테스트 가능성을 위한 인터페이스 BaseSubscriptionStatus 그것을 구현하십시오.

다른 팁

나는 옵션 2로 갈 것입니다.이는 끝이 가장 유연성을 사용하고 상황에서 더 효과적으로 스트리밍의 문제에 대응할 수있게합니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top