Шаблоны разработки для платформ Какао Apple: MVC, MVP, Пассивное Представление …, куда Apple направляется?

digits представляет собой список. Индекс 0th для list вернет первый элемент. Э.Г.

digits = [0, 1, 2, 3, 4, 5]
print(digits[0])
# 0

y является строковым представлением части списка digits (это то, что делает [:3], возвращает часть списка, вплоть до, но не включая 4-й пункт). Индексирование элемента 0th строки вернет первый символ строки или '['.

y = str(digits[:3])
print(y)
# '[0, 1, 2]'
print(y[0])
# '['

Причина, по которой индексация работает как для типа list, так и для типа str, заключается в том, что они обе являются последовательностями. См. здесь и здесь .

12
задан Lebyrt 7 May 2014 в 08:19
поделиться

6 ответов

Любой код любой сложности имеет много мест, где различные шаблоны могут применяться. MVC является видным в документах Какао, потому что он объясняет отношения между Вашим функциональным кодом (модель), Ваш код UI или дизайн IB (представление), и сервисами Какао, которые связывают их (контроллер). Это стоит акцента, особенно во вводном dox, потому что Вам нужно немного "призыва к действию" прекратить думать, что необходимо записать все это сами и начать думать о том, как разработать уникальные части и доверять платформе, чтобы сделать ее задание инфраструктуры.

Различные определения MVC легендарны, и стоит указать, что MVC не описан в канонической "Банде Четыре", заказывают, "Шаблоны разработки". Также стоит признать, что модель "MVC" Какао не является тем же как SmallTalk 80 MVC (который является где порожденная терминология).

Вероятно, также стоит указать, что "GoF" на самом деле использует слово "шаблон" для обозначения конкретного стиля документации, не абстрактного способа разработать код, который описывает шаблон. Это слишком плохо, что это использование было в основном потеряно. Если бы все мы поняли слово тот путь, то я мог сказать, что "будет действительно полезно, если кто-то на самом деле описал бы шаблон для MVC Какао". Затем мы не были бы все так смущены!

7
ответ дан 26 October 2019 в 10:47
поделиться

Какао основано на MVC (поскольку Apple определяет его), и всегда был на тенденции сделать все больше для Вас. Вот то, как это в настоящее время.

  • Уровень View: NSView, NSWindow, NSCell, их подклассы и CALayer
  • Уровень Controller (начиная с 10.3): NSController и подклассы (преимущественно NSArrayController)
  • Образцовый слой: Традиционно, необходимо было сделать это полностью сами, но с тех пор 10.4, Вы можете использовать Базовые Данные.

Привязка приводится в действие KVO (и KVC) и является связующим звеном, которые связывают эти три слоя. Вы связываете представления с контроллерами и контроллерами к модели.

4
ответ дан 26 October 2019 в 10:47
поделиться

Документы яблока на самом деле объясняют MVC лучше, чем что-либо еще, что я считал. В основном беспорядок, связанный с MVC, состоит в том, потому что это - составной шаблон. Это состоит из многих основных шаблонов. Хотя MVC не был обсужден в Шаблоне разработки Банды четыре, основные шаблоны были.

Основное различие я думаю, - то, что в мире Apple Контроллер является шаблоном посредника в дополнение к тому, каково это обычно.

Таким образом в отличие от традиционных моделей подхода в мире Apple не уведомляют представления изменения. Они не уведомляют никого на самом деле. Если Вы хотите изменить модель, необходимо сделать это через контроллер, чтобы удостовериться, что все уведомляются относительно изменений.

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

Это - главным образом объекты контроллера, которые должны быть переписаны в этом подходе. Конечно, Apple изменила это с привязкой. Но если Вы не используете привязку затем, Контроллеры специализированы.

Использование Apple MVC в C++

Я на самом деле следовал за дизайном Apple, когда приложениями программирования в C++ с помощью спокойных Представлений является QWidget's. Я поместил весь код, который имеет отношение к появлению в подклассе QWidget. Затем я делаю свой контроллер подклассом QObject и имею его, создают объекты представления и сигналы соединения от QWidgets до слотов в моем Контроллере QObject. Мой образцовый класс является регулярным классом, которые ничего не наследовали от QT и реализуют бизнес-логику. Это изменяется слотами контроллеров.

Кроме того, QWidgets может быть создан за пределами контроллера, таким образом, можно снова использовать контроллер для других типов представлений.

Не уверенный, если это помогает кому-либо, но я думаю, что иногда легче думать о шаблонах Какао с точки зрения C++, потому что мы привыкли получать шаблон, объясненный с точки зрения статически типизированного языка как C++ и Java.

2
ответ дан 26 October 2019 в 10:47
поделиться

Я не сказал бы, что Какао следует за пассивным шаблоном представления, как это описано там. Это говорит, что контроллер делает всю работу в подготовке представления и отправке уведомлений об изменении. В Какао объект представления будет обычно отвечать на уведомления KVO (посредством привязки) из модели, данные обновления из контроллера, с которым это связывается, подготовьте его через средства форматирования данных или оцените преобразователи и наконец отобразите его на экране.

Какао следует за MVC вполне прилично, хотя обычно аспект 'контроллера' разделен на контроллеры представления и образцовые контроллеры. Можно читать больше об этом здесь. Если у Вас есть какие-либо определенные примеры того, где Вы смущены, возможно, я могу обеспечить больше детали о способе, которым Какао делает вещи.

От того же руководства этот раздел объясняет некоторые дополнительные шаблоны разработки, которые Вы могли бы найти полезным. В моем собственном опыте, хотя после работы через несколько проектов MVC в Какао имеет тенденцию прибывать довольно естественно, я не был бы слишком обеспокоен этим.

3
ответ дан 26 October 2019 в 10:47
поделиться

Мм о. MVC = наиболее неверно процитированный шаблон когда-либо. Я прочитал по крайней мере 5 различных определений его.

Можно хотеть прочитать эту статью Martin Fowler

1
ответ дан 26 October 2019 в 10:47
поделиться

Я не думаю, что Cocoa/OpenStep когда-либо действительно сопровождаемый MVC, поскольку он описан в, например, SmallTalk 80. Контроллер SmallTalk - действительно что-то, что ответственно за интерпретацию взаимодействия с пользователем с Представлением, которое в случае Какао обрабатывается NSControl и поэтому уровнем View (возможно, это анализируется тот путь в платформе, но мы, как предполагается, не посмотрели внутри; это - то, какая абстракция - все о :-). Относительно тех ваших ссылок уровень Controller в Какао действительно подпадает под баннер Предъявителя, особенно при рассмотрении различных классов NS*Controller от Привязки Какао. Это действительно - шаттл между слоем представления и моделью.

В моих собственных приложениях я склонен иметь четыре отличных слоя, даже в местах, где они явно не разделяются; представление, предъявитель, сервис и модель. Затем "контроллеры предъявителя" и "сервисные контроллеры" имеют совершенно отдельные цели; логика и процессы находятся в сервисах, и рабочий процесс и варианты использования находятся в контроллерах представления. С точки зрения упаковки, если Вы в такую вещь, сервисы и модель вместе представляют краткий обзор "вещи сделать на материале", который может быть независимым от контекста. Предъявители и представления представляют, "и это - то, как пользователь приложения Mac OS X хотел бы использовать его", который зависит от более низкого пакета и инкапсулирует AppKit-конкретный (и AHIG-конкретный) классы и поведение.

2
ответ дан 26 October 2019 в 10:47
поделиться
Другие вопросы по тегам:

Похожие вопросы: