2017-11-01 7 views
0

다른 클라이언트에 API를 구현해야합니다. 각 클라이언트에 대한 구현은 다릅니다. 그래서 groovy (Java와 비슷한)에서 전략 패턴을 사용하여 인터페이스를 구현할 생각이고 각 클라이언트에 대해 (인터페이스를 구현하는) 클래스를 만들고 UI를 사용하여 클래스를 호출하도록 구성하려고합니다. (클래스의 드롭 다운 선택). 전략 패턴

interface PricingStrategy { 


} 



class CanadaPricingStrategy implements PricingStrategy { 

    Method 1... 
    Method 2... 

} 

class BrazilPricingStrategy implements PricingStrategy { 

    Method 1... 
    Method 2... 

} 

는 그렇게 할 수있는 가장 좋은 방법이 될 것인가 아니면 변수로 폐쇄를 사용하여 플러그 - 행동 방식을 사용할 수 있습니까?

답변

2

폐쇄 형을 변수로 사용하여 플러그 가능 동작 접근법을 사용할 수 있습니까?

요구 사항에 대해 더 알지 못해도 말할 수 없지만 일반적으로 설명 된 인터페이스 기반 접근 방식은 의미가 있습니다. 그것은 여전히 ​​플러그 가능할 수 있습니다. 각 구현에 대해 별도의 플러그인을 갖고있는 것처럼 할 수 있고 앱의 다른 버전을 다양한 동작을 제공하는 다양한 플러그인으로 구축 할 수 있습니다. 클래스 경로에있는 PricingStrategy 구현을 모두로드하는 동적 발견 메커니즘을 사용할 수 있습니다. 많은 옵션이 있지만 요구 사항에 대한 정보가 거의 없기 때문에 인터페이스 기반 접근 방식이 탄탄한 출발점이라고 말할 수 있습니다.

+0

답장을 보내 주셔서 감사합니다. 각 클라이언트에 대한 전략을 구성하는 옵션을 사용자 (Admin)에게 제공 할 생각입니다. PricingStrategy 구현 목록을 포함하는 드롭 다운 메뉴입니다. 전략은 각 클라이언트 (DB에 저장된 클래스 이름)에 대해 수행 된 구성에 따라 사용/호출됩니다. 그러나 나는 이것이 더 자바 지향적 접근이라고 생각한다. 그루비를 사용하고 있으므로 인터페이스를 사용하지 않고보다 나은 방법을 생각하고있었습니다. –

+1

"그루비를 사용하고 있으므로 인터페이스를 사용하지 않고 더 나은 방법을 생각하고있었습니다." - 인터페이스를 제거하고 Groovy 동적 디스패치를 ​​활용할 수는 있지만 그렇게하지는 않을 것입니다. 이 인터페이스는 Groovy를 사용하는 경우에도 여러 가지 이유로 유용합니다.예를 들어, Grails에서는 애플리케이션 또는 플러그인이 동작을 핵심 프레임 워크에 제공하기를 원하는 곳에서도 인터페이스를 사용합니다. 이는 매우 일반적인 접근 방식입니다. –

+0

감사합니다. 나는이 접근법으로 갈 것이다. 제가 궁금한 점이 있으시면 다시 연락 드리겠습니다. –

0

나는 아래에 언급 된 문장에 따라 두 부분으로 문제 문을 나눕니다 :

  1. 다른 클라이언트 API를 구현하려면.
  2. 그리고 각 클라이언트에 대한 구현이 다릅니다.

두 지점마다 나는 두 개의 서로 다른 디자인 패턴을 사용하여 문제 문을 구현하는 방법을 제안합니다으로 :

  1. 어댑터 디자인 패턴 : API는 항상 어댑터 디자인 패턴 소스 인해를 사용하여 설계되어야한다 클라이언트 인터페이스는 호환되지 않을 수 있으며이 디자인 패턴은 호환되지 않는 인터페이스를 클라이언트가 필요로하는 다른 인터페이스로 변환합니다. 이 유형의 사례는 양측에서 다양한 기술, 매개 변수 등 여러 상황으로 인해 API 디자인에서 항상 발생합니다.

  2. 전략 디자인 패턴 : 내부 다른 클라이언트의 논리 구현이 다릅니다. 따라서 전략 패턴의 도움을 받아이를 설계해야합니다.

그리고이 전략 패턴을 어댑터 디자인 패턴이라고 부릅니다.