Является ли хорошим дизайном приложения использование первого ответчика вместо цепочки методов вниз по иерархии контроллера?

Этот вопрос для приложения OSX, но тот же принцип может быть и для iOS.

У меня есть NSWindowController на раскадровке со следующей настройкой.

A. MainWindowController имеет в качестве подвидов:

1) Панель инструментов с кнопкой

2) SubVcA viewController со своим содержимым

B. SubVcA содержит в качестве содержимого представление SubVcB viewController'а

C. SubVcB имеет функцию ButtonPressed

введите здесь описание изображения

Цель состоит в том, чтобы вызвать функцию нажатия кнопки в SubVcB viewController, нажав кнопку на панели инструментов.

То, как я это делал, состоит в том, чтобы иметь цепочку реализаций методов от mainWindowController до целевого viewController, например:

MainWindowController call method on SubVcA
-->SubVcA call method on SubVcB
---> SubVcB call method buttonPressed

Это работает, но становится беспорядочным, когда стек контроллера становится примерно на 4 уровня в глубину. Это также становится еще более запутанным, когда SubVC(B) должен отправлять данные обратно в MainWindowController, потому что для того, чтобы иметь инкапсуляцию (например, не позволяя SubVC(B) иметь слишком много информации о своих вызовах viewControllers), Я должен реализовать методы делегата для резервного копирования цепочки. Это становится еще более запутанным, когда у вас есть более одной кнопки на панели инструментов.

Теперь... Я только начал возиться с элементом firstResponder на раскадровке.

введите здесь описание изображения

И я понимаю, что появляется ОГРОМНЫЙ список всех методов, которые реализованы в вашем приложении с помощью -(IBAction).

Итак, теперь мой вопрос: чтобы уменьшить беспорядок методов вверх и вниз по иерархии представлений, является ли хорошим дизайном приложения простое подключение действия кнопки панели инструментов MainWindowController непосредственно к методу buttonPressed в SubVc (B) viewController с использованием firstResponder объект на раскадровке?

Кроме того, есть ли какие-либо другие шаблоны дизайна, которые уменьшат беспорядок?


person Just a coder    schedule 05.08.2015    source источник
comment
Этот вопрос не касается языка Objective-C и не касается кода, написанного на ObjC; пожалуйста, не добавляйте этот тег снова.   -  person jscs    schedule 06.08.2015
comment
Теги предназначены для классификации вопросов по их теме. Они завершают предложение Этот вопрос касается... Использование их для демонстрации или это связано с... затрудняет поиск решений при поиске. В любом случае, многие люди следят за тегами [cocoa] и [cocoa-touch].   -  person jscs    schedule 06.08.2015
comment
Кажется разумным. Если вы когда-либо делали какие-либо настройки пункта меню вашего приложения, вы увидите, что это делается таким образом. Альтернативным подходом, чтобы избежать этого беспорядка, было бы опубликовать уведомление или использовать KVO для отслеживания изменений.   -  person Daniel Farrell    schedule 07.08.2015


Ответы (1)


Использование первого респондента для того, чтобы позволить действию с нулевой целью проникнуть вверх по цепочке респондентов к тому, кто может его обработать, именно для чего предназначен первый респондент. И это, очевидно, гораздо менее грязно, чем вы передаете сообщение из рук в руки самостоятельно.

person matt    schedule 21.08.2015
comment
Подробнее о цепочке респондеров и нулевых действиях (на iOS) в моей книге: apeth. com/iOSBook/ch11.html#_the_responder_chain - person matt; 22.08.2015