2011-09-11 2 views
1

테이블 뷰를 사용하여 일련의 모델 객체 (각각은 "NTTrip"의 인스턴스 임)의 정보를 표시하는 간단한 iOS 앱을 작성하고 있습니다. 나는 UITableViewController의 단일 하위 클래스를 사용하여 뷰와 모델 객체 세트 모두를 관리할지 또는 모델 객체를 관리하는 논리를 테이블 뷰의 데이터 소스 역할을하는 새 객체로 분리해야 하는지를 결정한다. 즉, 일종의 로직을 "보기 컨트롤러"와 "모델 컨트롤러"로 나누었습니다. 이것은 좋은 생각입니까, 아니면 필연적으로 필요로하지 않는 시스템에 복잡성을 추가할까요?UIViewController와 별도의 데이터 소스 개체를 사용하여 모델 개체를 관리 하시겠습니까?

답변

1

일반적으로 UITableView의 데이터 소스와 같은 특정 책임을 비 UIViewController 컨트롤러로 분할하는 것을 좋아합니다. 그 분리로 인해 컨트롤러를 테스트하고 유지 보수하는 것이 더 쉬워 졌다고 생각합니다.

그러나 항상 그런 것은 아닙니다. UITableViewController 사용을 고려하고 있다면 테이블 뷰가 화면을 채울 것으로 예상하고 여기 UIViewController 하위 클래스가 담당 할 다른 많은 동작이 없을 것임을 의미합니다. 각 컨트롤러에 대한 명확한 독립적 인 책임이 없으면 여러 컨트롤러가 불필요하게 복잡해질 것이라고 생각합니다.

하나의 대안으로 테이블 뷰의 대리인 및 데이터 소스 역할을하는 단일 UIViewController 하위 클래스가있을 수 있습니다. 컨트롤러는 NTTripService 컨트롤러를 호출 할 수 있습니다.이 컨트롤러는 사용자의 NTTrip 개체를로드하고 유지하며 많은 UIViewController 하위 클래스에서 표시 할 수 있도록합니다.

+0

정말 고마워! 마지막 생각은 내가 생각하고 있던 선을 따라 정확하게 나온다. 필자는 데이터에 액세스하기 위해 적어도 두 개의 다른 뷰 컨트롤러가 필요하다는 것을 알고 있으므로 서비스 컨트롤러를 만드는 것이 좋습니다. – Sean

1

컨트롤러는 일반적으로 앱에서 가장 복잡한 부분이며 데이터와 대화하고보기를 관리해야합니다. iOS에서는 일반적으로 데이터 컨트롤러가 없습니다. 따라서 테이블 뷰 컨트롤러는 모델과 통신하여 테이블 뷰에 적합한 데이터를 표시해야합니다. 다른 데이터 컨트롤러가 데이터 모델과 대화하고 데이터 소스로 작동하도록함으로써 원래 컨트롤러는 무엇을 할 수 있습니까? 다른 극단은 물론 작업의 모든 부분을 별도의 컨트롤러로 분류하는 것이지만 문제는 그 부분을 보게됩니다.

결론 - 단일 테이블보기 컨트롤러는 데이터와 테이블보기를 모두 관리해야합니다. 즉 컨트롤러가 의도 한 것입니다.

렌치 - 다른 컨트롤러에서 동일한 데이터를 관리 (편집, 사용) 한 경우 Jonah가 제안한대로 서비스에 해당 데이터를 고려할 수 있습니다. 그렇지 않으면 단지 불필요한 작업과 복잡합니다.

관련 문제