2014-02-27 5 views
2

다 대다 관계에서 상호 작용 패턴을 선택하는 문제가 자주 발생합니다. 다음 예제는 동일한 목표를 달성하기위한 네 가지 방법을 보여줍니다.중재자의 네 가지 유형

목표는 다른 (LazyBob, CleverAnn, FastJon)에 개체의 한 그룹 (DeliveryCompany, College, Supermarket)에서 메시지 (광고에)를 제공하는 것입니다. 분명히 우리는 중재자 (AdBoard)가 필요합니다. 게시자는 적절한 사람과 가입자에게 광고를 전달하여 흥미로운 제안을 알릴 수 있습니다.

광고에 대한 응답은 현재 우려 할 사항이 아니지만 문제가되는 경우 향후에 필요하다고 가정 할 수 있습니다.

모든 가입자가 자신의 차이를 설명하는 인터페이스를 구현해야합니다 : 어쨌든,이 응답은 다른 경로 (? 우리가 바로, 다른 광고와 광고에 응답하지 않는 것) 먼저

이 있어야합니다. 중재자는 그들과 함께 주입되어 출판사의 목적을위한 인터페이스를 구현합니다. 둘째

Mediator-1

: 최초의

역 버전. 이제 게시자는 자신의 선호 사항을 설명하는 인터페이스를 구현합니다. 이것은 가입자의 목적을위한 인터페이스를 구현하는 조정자가 사용합니다. 셋째

Mediator-2

: 타겟 광고에을 (백 엔드)를 보내기위한 흥미로운 주제 (프런트 엔드)에 광고를 수신 :

중재자는 두 개의 인터페이스를 구현합니다. 모든 게시자에게 백엔드 삽입, 모든 가입자에게 프런트 엔드 삽입

Mediator-3

넷째 : 3 분의 1

역 버전. 이제 중재자는 인터페이스를 구현하는 여러 게시자와 가입자를 투입합니다.

Mediator-4

질문 :

는 이러한 변형이 같은 성공 목표에 도달 했습니까?

개발 초기에는 의심의 여지없이 선택할 수 있습니다. 맞지 않습니까? 그렇지 않다면, 선택 알고리즘은 무엇입니까?

+0

당신은 그 차이점을 설명 할 수 있습니까? 당신이 확신하지 못하는 결정은 무엇입니까? – Meier

+0

차이점은 다이어그램에서 분명해야하지만 몇 분 후에 몇 가지 설명을 추가하겠습니다. 어느 것을 골라야할지 모르겠습니다. 나는 동전을 두 번 뒤집어 야하나요? 너는 무엇을 할 것이냐? – astef

답변

1

커플 링을 최소화하려는 경우 회사와 JobSeekers는 AdBoard에 대한 인터페이스 만 사용하는 것이 이상적이지만 구조적인 변경은 필요하지 않는 것이 이상적입니다.

그러나 JobSeeker를 구독 할 수 있어야합니다 (그리고 지금이 모델을 작성하는 것이 중요합니다). 그러면 IAdSubscriberInterface이 필요하고 AdBoard은 구독자를 집계해야합니다.

시간이있을 때 JobSeekers가 AdBoard을보고있는 경우 AdBoard은 JobSeekers에 대해 알 필요가 없습니다.

비즈니스 관계가없는 한 AdBoard은 AdPublishers에 대해 알 필요가 없습니다.

사진에 누락 된 부분은 광고입니다. AdBoard은 광고를 집계합니다. 광고에는 AdPublisher에 대한 정보가 필요합니다. AdPublisher와 연결될 수 있습니다. 또는 커플 링을 더욱 최소화하려는 경우 회사 이름과 같은 필수 정보가 종이 기반 광고에서도 수행되는 것처럼 작성시 광고에 복사됩니다.

+0

솔직히, 여기 너무 많이 동의하지 않거나 이해하지 못합니다. 처음부터 시작합시다. "회사와 JobSeekers가 AdBoard에 대한 인터페이스를 사용하는 것이 이상적입니다."라고 말하면 3 번째 변형을 의미합니까? 그러나 왜 다른 사람들보다 덜 결합되어 있습니까? – astef

+0

회사는 AdBoard를 사용하기 위해 IAddPublisherInterface를 구현할 필요가 없기 때문에 결합이 적습니다. – Meier

+0

인터페이스를 구현하는 것이 인터페이스를 사용하는 것보다 더 어렵다는 뜻입니까? 하지만 왜? 우리가 ISP를 따르는 경우, 어떤 인터페이스를 사용하는 클래스는 각 멤버를 호출하고 얼마 동안 구현 자의 모든 불변량을 "통과해야"합니다. 구현 자와 동일하게 모든 멤버를 구현하고 모든 불변 조건을 만족해야합니다. – astef

관련 문제