Вопрос о передовых методах связывания MVC и какао

Допустим, у меня есть представление myView, контроллер представления myViewController и какой-то объект модели myModel. Кроме того, допустим, модель имеет два свойства, совместимых с KVO, arrayOfPeopleNames и arrayOfAnimalKinds (оба NSStrings).

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

Мой вопрос в том, что если myController имеет ссылку на myModel, а раскрывающийся список привязан к myViewController, рекомендуется ли устанавливать путь для ключей по строкам myModel.arrayOfPeopleNames?

Или мне нужно настроить дополнительный массив NSArray в myViewController, который отражает тот, что указан в myModel, и вместо этого привязать его к этому ключевому пути?

Первое кажется намного проще с точки зрения реализации (мне не нужно заставлять массив контроллеров зеркально отображать массив модели), но мне интересно, сильно ли он открывает модель для представления.

Мнения?

Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
5
0
1 442
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Вы не должны зеркалировать массив модели в контроллере. Хотя я бы не слишком беспокоился о привязке непосредственно к массиву модели в очень простом случае, вы также можете привязать свои объекты пользовательского интерфейса к NSArrayController, который управляет массивом модели. Это обеспечит разделение модели и пользовательского интерфейса и, что более важно, позволит обрабатывать такие задачи, как сортировка, выбор, добавление и удаление объектов и т. д.

Я могу понять, откуда вы пришли, потому что обеспокоены тем, что KVO и привязки нарушают "чистый" дизайн контроллера представления модели, но вам не о чем беспокоиться. Несмотря на то, что уведомления KVO передаются непосредственно в представление из модели, настройка и изменение соединения между представлением и моделью по-прежнему является обязанностью контроллера (только в этом случае это делается через IB). Например, вы не хотите, чтобы объект модели получал ссылку на представление и привязывался к пользовательскому интерфейсу, за это отвечает контроллер.

В качестве еще одного примера того, чего следует избегать, рассмотрим, если бы вместо имен в вашей модели был массив «идентификаторов животных». Вместо того, чтобы создавать метод для преобразования идентификаторов животных в понятные человеку имена животных в модели, вы можете вместо этого создать преобразователь значений или форматировщик для выполнения преобразования. Это позволяет поддерживать такой уровень разделения между моделью и видом.

Помните также, что цель шаблонов проектирования - уменьшить сложность кодирования решения проблемы, а не увеличить ее. Вы увидите, что именно так работает Cocoa, даже если он не всегда может придерживаться самого строгого определения шаблона.

Спасибо, Марк, в этом есть большой смысл. Я ценю все вопросы, на которые вы давали мне ответы в последнее время :).

Lawrence Johnston 10.12.2008 21:21

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