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

Этот вопрос относится к приложению 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), Я должен реализовать методы делегата обратно по цепочке. Это становится еще сложнее, когда у вас есть более чем одна кнопка на панели инструментов.

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

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

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

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

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

1 ответ

Решение

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

Другие вопросы по тегам