2008-12-10 3 views
5

보기, myView,보기 컨트롤러, myViewController 및 일종의 모델 개체 인 myModel이 있다고 가정 해 보겠습니다. 또한 모델에 두 개의 KVO 호환 속성 인 arrayOfPeopleNamesarrayOfAnimalKinds (둘 다 NSString)이 있다고 가정 해 봅니다.MVC 및 코코아 바인딩 모범 사례 질문

제 생각에는이 두 배열의 내용에 두 개의 팝업이 바인딩되기를 원합니다.

myController에 myModel에 대한 참조가 있고 드롭 다운이 myViewController에 바인딩되어 있다면 myModel.arrayOfPeopleNames 줄을 따라 키 노트를 설정하는 것이 좋습니다.

또는 myModel에있는 NSArray를 미러링하고 대신 해당 키 패스에 바인딩하는 myViewController에 NSArray를 추가로 설정해야합니까?

이전 버전은 구현 관점에서 훨씬 단순 해 보였습니다. 컨트롤러 배열을 모델 배열로 미러링 할 필요는 없었습니다. 그러나 모델을 뷰에 많이 표시하는지 궁금합니다.

의견?

답변

8

컨트롤러에서 모델 배열을 미러링하지 마십시오. 매우 간단한 경우에 모델의 배열에 직접 바인딩하는 것에 대해서는별로 신경 쓰지 않지만 모델의 배열을 관리하는 NSArrayController에 UI 객체를 바인딩 할 수도 있습니다. 이렇게하면 모델과 UI가 분리되고 더 중요한 것은 정렬, 선택, 객체 추가 및 제거 등과 같은 작업을 처리하는 것입니다.

KVO와 바인딩이 "순수한"모델보기 컨트롤러 디자인에 위배된다는 사실을 알 수 있지만 걱정할 필요는 없습니다. KVO 알림이 모델에서보기로 직접 전달 되더라도 뷰와 모델 간의 연결을 설정하고 변경하는 것은 컨트롤러의 책임입니다 (이 경우에만 IB를 통해 수행됩니다). 예를 들어, 모델 객체가 뷰에 대한 참조를 가져 와서 UI 자체에 바인딩하는 것은 컨트롤러의 책임 일 것입니다.

피할 수있는 다른 예로, 대신 모델에 이름 대신 "동물 ID"배열이있는 경우를 고려해보십시오. 동물 ID를 모델에서 사람이 읽을 수있는 동물 이름으로 변환하는 메소드를 만드는 대신 값 변환 자나 포맷터를 만들어 변환을 수행하려고 할 수 있습니다. 이를 통해 모델과 뷰 사이의 분리 수준을 유지할 수 있습니다.

디자인 패턴의 목적은 솔루션을 문제에 맞게 코딩하는 복잡성을 줄이고 결코 늘리지 않는 것입니다. 패턴의 가장 엄격한 정의를 항상 고수하지는 않을지라도 코코아가 정확히 작동하는 방식임을 알 수 있습니다.

+0

마크 덕분에 많은 의미가 있습니다. 나는 당신이 최근에 저에게 답을 해주고있는 모든 질문에 감사드립니다. :) –

+0

도움이 되었기 때문에 기쁩니다! –