2011-03-15 4 views
2

제목이 혼란스럽게 들릴 경우 미안하지만 더 좋은 것은 없습니다.두 가지 다른보기 유형을 처리 할 수있는보기 컨트롤러 구현

기본적으로 데이터베이스에서 가져온 여러 이미지를 표시하는 페이징 스크롤보기를 관리하는보기 컨트롤러가 있습니다. 저는 MVC를 처음 사용하고 있으며, 가능한 한 최선의 방법으로이 패턴을 따르는 코드를 작성하려고했습니다. (내 경험은 단순히 다른 사람들의 코드를보고 Apple 클래스가 작동하는 방식을 기반으로하므로 결함이있을 수 있습니다. 나는 그것이 당신에게 말해 줄 수 있다면 감사 할 것입니다.)

이것은 내가 한 일입니다. UIScrollView이 포함 된 사용자 정의보기 클래스가 있고 두 개의 공용 속성 인 dataSourcedelegate이 있습니다. 데이터 소스 객체는 정의한 프로토콜을 준수해야합니다. 이미지의 수와 이미지 자체를 반환합니다. 선택한 페이지가 변경되면 대리인에게 알림이 전송됩니다.

나는 그것을 올바르게 얻었기를 바랍니다. 어쨌든 그것은 작동합니다. 필요한 경우 데이터 소스를 아무 문제없이 다시 구현할 수 있으며 데이터를 제공하는 코드는이를 표시하는 코드와 분리되어 있습니다.

하지만 문제가 있습니다. 페이징 스크롤 뷰를 가능한 적은 코드로 복제하여 CoverFlow와 같은 뷰로 대체 할 수 있어야합니다. 이 CoverFlow보기를 사용하여 다른보기 컨트롤러 클래스를 만들지 않고도이 작업을 수행하는 더 좋은 방법이 있어야한다는 것을 알고 있습니다. 두 개의 뷰 클래스는 비슷한 방법으로 작동하며 비슷한 방식으로 작동하므로 복제하는 대신 동일한 뷰 컨트롤러 코드를 사용하는 것이 좋습니다.

아마도 generic 메서드로 추상 클래스를 작성하고 두 가지 구현 (하나는 스크롤 뷰, 다른 하나는 CoverFlow 뷰)을 작성한 다음 전달 된 매개 변수를 기반으로 컨트롤러에서 두 인스턴스 중 하나를 인스턴스화 할 수 있습니다. 그것. 이것을 달성하는 가장 좋은 방법입니까?

이 내용이 너무 혼란스럽지 않고 내 접근 방식에 결함이 없기를 바랍니다. 감사.

답변

1

일반적으로 모든보기 방법에서 어떤 유형의보기를 사용하는지 확인해야하기 때문에 개별보기에 별도의보기 컨트롤러가 필요합니다. 그런 다음 특수한 경우가 발생하여 코드가 엉망이됩니다. 게다가 어떤 시점에서 하나의 관점을 완전히 버릴 수도 있습니다. 코드가 모듈화할수록 좋습니다.

Model-View-Controller 설계의 핵심 아이디어는 뷰가 논리적으로 데이터 모델과 분리된다는 것입니다. 모델은 프로그램의 실제 핵심이어야하며 컨트롤러를 통해 모든 뷰에 대한 데이터를 제공해야합니다. 디자인을 올바르게 구현했다면, 모델이 가능한 모든보기를 교대로 지원할 것이기 때문에 커스터마이즈 및 코드 중복이 거의 없습니다.

대부분의 앱에서 가장 많이 맞춤 설정되는 컨트롤러이며 중복 방지를 위해 많은 노력을 기울여서는 안됩니다. 컨트롤러간에 코드가 중복되는 경우 컨트롤러에 모델 또는 뷰 로직이 없어야합니다.

UITableViewDataSource 개체와 같은 모델의 데이터 소스 개체 인터페이스처럼 보이며 두 뷰 모두 동일한 논리를 사용하므로 적절한 프로토콜을 정의한 경우 두 뷰에 동일한 대리자를 사용할 수 있습니다. 각 뷰에는 사용자 지정을 처리하기 위해 사용자 지정 대리자가 필요하지만이를 사용자가 적용해야하는 대리인 디자인 패턴의 일부입니다.

1

아마도 내가 일반적인 방법과 추상 클래스를 작성하고 그것의 두 가지 구현의 CoverFlow와 보기에 대한 스크롤 뷰에 대한 하나 하나를 작성한 다음 컨트롤러에 두 가지 중 하나를 인스턴스화 할 수 , 전달 된 매개 변수를 기반으로합니다. 이 문제를 해결하는 가장 좋은 방법은 입니까?

괜찮은 접근 방식입니다.

두보기 유형 모두를 관리하는 하나의보기 컨트롤러 만 구현하여 주문형보기 (loadView)에서 올바른보기를 만들 수도 있습니다.

관련 문제