2009-11-24 2 views
2

여러 가지 방법을 드러내는 웹 서비스와 대화 할 앱을 개발 중입니다. 웹 서비스에 대한 액세스를 중앙 집중화하고, 동기식 및 비동기식 액세스 옵션을 제공하고 클라이언트에 데이터를 반환하는 데 가장 좋은 패턴이 무엇인지 파악하려고합니다. 아직이 문제를 해결 한 사람이 있습니까?iPhone 용 디자인 패턴 -> 웹 서비스 기능?

모든 메소드에 대한 한 클래스는 모든 것을 잘 집중시키는 것처럼 보이지만 여러 비동기 호출을 처리 할 때 데이터를 올바른 위치로 반환하는 것이 혼란 스러울 것이라고 생각합니다. 내가 가진 또 다른 생각은 각 방법에 대한 별도의 하위 클래스 였고 일부 종류의 공장 중개 액세스가 있었지만 상황을 과장하는 것으로 생각했습니다.

: 나는 최근에 같은 문제를 건너 왔어요

답변

1

(주 일반적인 문제에 대한 높은 수준의 디자인 패턴 솔루션을 찾고 등/구문 분석하는 방법 응답/사용 부르는 방법을 요구하지 않음). 내 솔루션이 최적이라고 믿지는 않지만, 도움이 될 것입니다.

웹 서비스 관리자와 끝점 프로토콜을 만들었습니다. 끝점 프로토콜을 구현하는 각 객체는 웹 서비스 끝점 (메서드)에 연결하고, 반환 된 데이터를 구문 분석하고, 대리자 (일반적으로 웹 서비스 관리자)에게 완료 또는 오류를 알립니다. 99 %의 시간을 사용하는 EndpointBase 클래스를 작성했습니다.

웹 서비스 관리자는 필요에 따라 끝점을 인스턴스화하고 호출하는 작업을 담당합니다. 모든 호출은 비동기 적으로 발생합니다.

모두 모두 나를 위해 꽤 잘 작동하는 것 같습니다. 한 종점에서 다른 종점의 응답에 의존하는 상황이 발생했습니다 (필자는 여기서 명령 패턴을 사용했습니다). 당신이보고 싶을거야

SDK 구성 요소는 다음과 같습니다

  • 있는 NSURLConnection
  • NSXMLParser
+0

나는 이런 종류의 해결책을 향한 경로를 따라 가고있었습니다. 나는 이것을 생각하는 유일한 사람이 아닌 것처럼 들립니다. 유일한 차이점은 대리인을 사용하는 대신 KVO를 사용한다는 것입니다. 왜냐하면 잠재적으로 동시에 여러 끝점 소비자를 가질 수 있기 때문입니다. 이것은 또한 모든 것이 단지 동일한 엔드 포인트 객체를 관찰하고 있기 때문에 나중에 일종의 캐싱 로직을 삽입 할 수있게합니다. 은 나중에 이것이 끝나는 방식으로 나중에 업데이트됩니다. –

+0

대리인은 주로 웹 서비스 관리자에게 끝점이 완료되었음을 알리고 끝점에서 서비스 관리자가 수행 할 작업을 결정하지 못한 경우이를 알립니다. KVO를 사용하여 데이터를 사용하는 대부분의보기를 업데이트합니다. – jessecurry

1

공장? 우리는 악취가 나는 공장이 필요하지 않습니다.

몇 번 해봤지만 모든 웹 서비스 호출에 대한 메소드를 제공하고 서비스와 통신하는 세부 사항을 캡슐화하며 연결 ​​문제를 처리하는 등의 객체를 기본적으로 말합니다. 한 응용 프로그램에서는 세션 상태를 유지해야하기 때문에 싱글 톤이었습니다. 다른 앱에서는 정적 메소드 모음 일뿐입니다.

일부 응답 데이터의 형식화와 함께 그 책임은 전적으로 있습니다.

통화가 동기인지 비동기인지는 호출자의 몫입니다. 클래스 자체는 동기식으로 쓰여지고 호출자는 필요한 경우 별도의 스레드에서이를 사용합니다. 코코아의 performSelector ... 메서드를 사용하면 쉽게 만들 수 있습니다.

1

데이터 상호 작용에 REST가 적합한 경우 ObjectiveResource 라이브러리를 제안합니다. Ruby on Rails 응용 프로그램과 원활하게 작동하도록 설계되었지만 기본적으로 레일스 ActiveResource 규칙을 사용하여 HTTP를 통해 JSON 또는 POX (일반 오래된 XML)를 사용합니다.

기본적으로 NSObject의 카테고리 세트이며 Dog 객체 목록을 반환하는 [Dog findAllRemote] 또는 myDog에 대한 변경 사항을 보내려면 [myDog saveRemote]와 같은 전화를 걸 수있는 기본 객체 유형 중 일부입니다. 다시 서버에 객체.