0

좋은 디자인을 고려하면 각보기 컨트롤러가 자신의 연결/네트워킹 /로드를 관리하거나 앱 대리인 또는 별도의 개체에서 중앙화하는 것이 더 낫습니까? iPhone 앱 아키텍처

상황

:

나는 멀티 탭 앱 탐색 컨트롤러와 각, 이하 뷰 컨트롤러의 번호를 가지고있다. 각 뷰 컨트롤러는 XML 및 이미지를로드하는 네트워킹을 수행하고 있습니다. 현재, 나는 그것을 비동기 적으로 XML을 얻고, 그것을 처리하고, 정보를 표시하기 위해 top view 컨트롤러를 다시 호출 한 다음 배열로 이미지를로드하는 별도의 프로세스를 시작하기 위해 애플 리케이션 델리게이트에 호출하는 설정을하고있다. 각각로드 될 때마다 콜백을 보냅니다.

아키텍처 관점에서 각보기 컨트롤러에 더 많은 네트워킹 코드를 갖거나 앱 대리인에게 다시 전화하는 것이 더 좋습니까?

아이디어/의견?

TIA.

답변

0

각 View Controller에이 기능을 추가하는 것이 더 합리적이라고 생각합니다. 지금 설정 한 방식은 약간 이상해 보입니다. 위임을 사용하여 App Delegate가 각 View Controller와 대화 할 수 있어야하며, App Delegate에서 View Controller에 대한 참조가 많이 있어야합니다. 아마 필요하지 않습니다. 앱 대리인이 어수선하다고 생각합니다. 사용자가 특정 뷰를 보는 것을 중지하고 해당 뷰와 관련된 XML이 앱으로 다시 전송되기 전에 어떻게 처리하는지 궁금합니다. 파싱 ​​된

보기 컨트롤러에서 코드 중복이 발생할 염려가있는 경우 범주를 사용하여 코드를 완화 할 수 있습니다.

결국에는 도메인 컨트롤러가 View Controller가 아닌 이것을 처리하는 것이 가장 바람직하다고 생각합니다. 예를 들어, viewWillAppear에서 도메인 객체의 인스턴스를 가져 오거나 생성하고 뷰 컨트롤러가 델리게이트 인 getData 메소드를 시작합니다. 모든 요청/구문 분석은 도메인 개체에서 수행되며 완료되면보기 컨트롤러에 getDataDidFinish 메시지 또는 이와 비슷한 메시지를 보냅니다.

+0

내가 해왔 던 것은 대부분의 네트워킹 호출을 응용 프로그램 대리인에 배치하고 XML 파서가 반환하면 어느 뷰가 상위 뷰 컨트롤러인지 확인한 다음 해당 테이블을 다시로드하는 호출입니다. 그러나이 접근법의 문제점은 앱 델리게이트에 너무 많은 코드가 있다는 것입니다. 나는 모든 네트워킹을 새로운 싱글 톤으로 리팩토링하는 것을 선택했다. 그것은 응용 프로그램 대리인을 조금 단순화하지만, 내가 원하는만큼하지는 않습니다. – user279778

0

이런 상황이 생길 때 나는 나를 위해 모든 네트워킹 작업을 처리하는 객체를 만드는 경향이 있습니다. 내가 좋아하는 코드를 작성할 수있는 결국 그런 식으로 : 그것은 깔끔한 내 코드 기반을 유지하고 중복 된 코드를 최소화하기 때문에

[netObj getXML:somePlace]; 

나는이 방법을 좋아하는 가장 큰 이유입니다.