2010-11-18 2 views
1

특정 모델에 대한 정보를 알아야하는 문서 기반 응용 프로그램에 여러 계층의 중첩 된 개체가있는 상황이 있습니다.개체에 인터페이스를 전달하거나 Cocoa에서 위임을 사용하고 있습니까?

특히 NSTextView, NSLayoutManager 및 NSTypesetter가 있습니다. 각 모델은 올바르게 렌더링하려면 내 문서 모델에 대한 특정 속성을 알아야합니다.

현재 각 클래스를 서브 클래 싱하고 모델에 대한 참조가있는 속성이 있습니다. 참조는 서브 클래스 NSLayoutManager에, 내 문서 컨트롤러에서 아래로 통과 한 다음 서브 클래스 NSTypesetter에 넘겨된다

@implementation MyLayoutManager : NSLayoutManager { 
    @private 
    MyModel *model; 
} 
@property (retain) MyModel *model; 
-(id)initWithModel:(MyModel *)model; 
@end 

@implementation MyTypesetter : NSATSTypesetter { 
    @private 
    MyModel *model; 
} 
@property (retain) MyModel *model; 
-(id)initWithModel:(MyModel *)model; 
@end 

모델은 컨트롤러 -> MyLayoutManager-> MyTypesetter에서 전달됩니다. 이것은 조금 중복 된 것으로 보이고 아마도 너무 단단히 결합 된 것 같습니다.

대리인 패턴이 더 좋을까요? 그렇다면 설정하는 가장 좋은 방법은 무엇입니까? Typesetter에는 대리자가 없지만 LayoutManager에 이미 대리자가 있습니다. Typesetter에 대리자를 추가하고 LayoutManager에서 대리자를 재정의해야합니까? 또는 내 모델의 인터페이스를 전달하는 것이 더 좋습니다.

어떤 통찰력도 인정 될 것입니다. 감사.

답변

1

일반적으로 컨트롤러와 모델 간의 통신을 격리 한 다음 필요한 다른 관련 개체에 필요한 정보를 제공하는 작업을 위임하는 것이 좋습니다.

더 많은 OO 및 올바른 동안, 그것은 항상 가장 예쁜 것은 아닙니다. 그러나 일반적으로 유지하는 것이 가장 쉽습니다.

Model ===> Controller ===> View 
       || 
       || 
       \/ 
      Other Objects 
+0

동의. 필자는 컨트롤러에 뷰에 필요한 데이터를 요청하는 대리자 메서드를 설정하기 만했습니다. – Donald

관련 문제