2

ОбзорIOS MVC архитектуры - отдельный вид другой, чем вид зрения контроллера

  • Я делаю проект IOS, используя архитектуру MVC. Простите мое невежество, я просто смущен, я ищу хороший дизайн.
  • Представление, которое я планирую использовать, будет содержать несколько кнопок на нем, а также некоторые метки и текстовые поля. Моему представлению не понадобится ни одна пользовательская реализация drawRect.
  • Вся моя логика, как к тому, что должно быть сделано, когда нажата кнопка или событие происходит, на мой взгляд, контроллер

У меня есть пара сомнений:

  1. для по сравнению с сценарием, еще лучше (хорошая практика) создать отдельный вид (вид, отличный от представления контроллера)? Если да, то почему?

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

  3. Я хотел бы отключить набор кнопок, когда пользователь коснется текстового поля, и клавиатура подходит.

    a) Могу ли я поместить эту логику отключения некоторых кнопок в реализации отдельного представления (представление создано в вопросе 1)?

    б) Из моего родительского вида (представление, созданное в вопросе 1), могу ли я создавать выходы для кнопок (которые являются subviews) для отключения некоторых кнопок? Я не могу этого сделать. Или я должен использовать метод subviews и пропустить через кнопку, которую я ищу?

Мое понимание

  1. Модель содержит данные

  2. View отвечает за отображение и не должно содержать бизнесу логики.

  3. Посмотреть контроллер является только один, чтобы взаимодействовать между моделью и представлением и содержит бизнес-логику

ответ

4
  1. Там нет необходимости создавать отдельный вид - вид контроллера представления (как правило, только простой UIView), безусловно, может содержать ваши кнопки и текстовые поля. Если вы хотите поместить некоторые из них в отдельный контейнер (возможно, чтобы вы могли перемещать их как группу), для этого вы могли бы использовать простой старый UIView.

  2. Представления являются ответчиками, поэтому подклассы UIView могут переопределять методы обработки касания, если вы хотите выполнять специальную обработку касания.

  3. a) Обычно используется код, который управляет представлениями (такими как кнопки отключения) в контроллере представления. б) Опять же, вы обычно помещаете выходы для ваших кнопок в контроллере вида.

Когда люди говорят о «бизнес-логике», они обычно означают логику, необходимую для поддержания и работы с данными, которыми занимается приложение. Такие вещи часто лучше всего подходят для модели. С другой стороны, код, который управляет представлениями, такими как включение или отключение кнопок или перемещение данных из модели в представления (или наоборот), принадлежит контроллеру представления.

+1

Удивительное объяснение, спасибо тонну, было действительно хорошо объяснено! – user1046037

0

Q1. для вышеприведенного сценария, еще лучше (хорошая практика) создать отдельный вид (вид, отличный от представления контроллера)? Если да, то почему?

Если вы создадите свой вид через Interface Builder, это отдельный вид, на мой взгляд. ;) Но если вы попытаетесь создать иерархию представлений программно, не используя n/xib, вы можете поместить все ваши макеты представления в метод loadView и заполнить данные в viewDidLoad, вот что делает View-Controller. А также вы можете создать класс UIView для реализации макета представления, как и n/xib, но программно.

Как сказал DOC,

... Можно объединить роли, которую играют MVC объект, делая объект, например, выполнить оба контроллер и просматривать роли в этом случае, это было бы называться контроллером вида. ...

... Контроллер вида - это контроллер, который в основном относится к слою представления. Он «владеет» интерфейсом (представлениями); его основными обязанностями являются управление интерфейсом и связь с моделью. Методы действий, связанные с данными, отображаемыми в представлении, обычно реализуются в контроллере представления. Объект NSWindowController (также часть архитектуры документа) является примером контроллера вида. ...

MVC in Cocoa - это нечто иное, как то, что вы знаете. Вы можете сослаться на официальный документ HERE.


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

Вы можете настроить вид, например, установить цвет текста или стиль шрифта для вашей кнопки, и т.д.


Q3.a. Поэтому я должен поместить эту логику отключения некоторых кнопок в реализации отдельного представления (представление, созданное в вопросе 1)

Лучше поставить логику в контроллер (или контроллер вида), как предпочтителен MVC.

Q3.b. Из моего родительского представления (представление, созданное в вопросе 1), могу ли я создать выходные точки на кнопках (которые являются subviews), чтобы отключить некоторые из кнопок? Я не могу этого сделать. Или я должен использовать метод subviews и цикл через кнопку, которую я ищу?

Вы можете установить тег (setTag:) для ваших кнопок и получить правильный, который вы хотите. Но имейте в виду, во-первых, вам нужно, чтобы кнопка была показана родителям.

+1

Спасибо за ваш отзыв, мне понравилось предложение setTag идентифицировать subviews. – user1046037

+0

@ user1046037 приветствую :) – Kjuly

Смежные вопросы