Это не обычный способ взаимодействия объектов контроллера (Controller
в вашем примере) и объектов модели (Task
). Существует множество интерпретаций паттерна Model-View-Controller (MVC), но, вообще говоря, объекты контроллера наблюдают или запрашивают объекты модели, а не полагаются на модели, чтобы узнать, кто их контроллеры, и ожидают, что они будут взаимодействовать напрямую. с ними.
Ваш дизайн создает излишне тесную связь между моделью и объектами контроллера. Что произойдет в будущем, если, например, вы решите добавить второй контроллер для управления другим представлением задач? Будут ли ваши Task
объекты управлять связью с несколькими контроллерами? Это может привести к написанию большого количества кода, если у вас есть значительное количество объектов модели.
В Какао существует два основных способа объявления объектами модели событий, представляющих интерес для остальной части программы: уведомления и наблюдение значения ключа (KVO). Уведомления очень просты. Вы создаете уведомления с именем и соответствующим объектом модели, а затем публикуете их в общем NSNotificationCenter
. Оттуда центр уведомлений отвечает за доставку сообщений любым объектам, которые на них подписываются.
КВО немного сложнее объяснить. По сути, за кулисами у Какао есть механизм для обнаружения изменений в объектах и отправки обновленных значений непосредственно классам, которые их наблюдают. (KVO также является частью основы привязки какао, которой, к сожалению, нет в iPhone SDK)
Однако обе эти технологии объединяют то, что они предоставляют общий механизм для информирования любых других объектов о том, что что-то интересное произошло в модельном объекте. То, как эти объекты решили реагировать, полностью зависит от его решения.
Это разделение делает объекты контроллера и объекты модели менее зависимыми друг от друга, и это означает, что вы, как программист, можете меньше беспокоиться о конкретных взаимодействиях между уровнями контроллера и модели.