Дизайн модели для рамки какао Apple: MVC, MVP, Passive View ... где Apple, заголовок?

голоса
12

Для того, чтобы заложить основу для этого вопроса, я буду утверждать, что я получаю мои определения для MVC, MVP, и пассивного вида из следующих действий:

Model View Controller (MVC)
Model View Presenter (MVP)
Passive View (PV)

Apple, всегда заявлял, что он использует шаблон проектирования MVC, но я заметил, в OS X 10.5 мы получили NSViewController, КВО, переплеты и т.д., объекты, которые кажутся ведут себя скорее как пассивный шаблон Просмотр дизайна. Является ли это, где Apple, хочет, чтобы возглавить? Я хочу, чтобы распланировать свой код таким образом, что играет, а также возможно с выбранными шаблонами проектирования компании Apple, поэтому я хочу знать, где Apple, возглавляет. У кого-нибудь есть ключ?

Задан 09/12/2008 в 18:57
источник пользователем
На других языках...                            


6 ответов

голоса
7

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

Определения вариант MVC легендарны, и это стоит отметить, что MVC не описывается в канонической «Банда четырех» книги «Design Patterns». Также стоит признать, что модель Какао «MVC» не то же самое, как Smalltalk 80 MVC (что, где терминология возникла).

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

Ответил 10/12/2008 в 19:22
источник пользователем

голоса
4

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

  • Посмотреть слой: NSView, NSWindow, NSCell, их подклассы и CALayer
  • Контроллер слоя (с 10.3): NSController и подклассы (преимущественно NSArrayController)
  • Модель слой: Традиционно, вы должны были сделать это полностью самостоятельно, но так как 10.4, вы можете быть в состоянии использовать Core Data.

Наручники питаются от KVO (и ХВК), и клей, которые связывают три слоя вместе. Вы связываете с видом на контроллеры и контроллеры на модели.

Ответил 09/12/2008 в 23:41
источник пользователем

голоса
3

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

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

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

Ответил 09/12/2008 в 19:13
источник пользователем

голоса
2

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

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

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

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

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

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

Я на самом деле следовал дизайн Apple, при программировании приложений в C ++ с использованием Qt. Представления QWidget годов. Я поставил весь код, который должен делать с появлением в подклассе QWidget. Тогда я сделать мой контроллер по QObject подкласса и он создавать объекты просмотра и подключение сигналов от QWidgets слотов в моем QObject Controller. Моя модель класса является обычным классом, который не наследуют ничего от Qt и реализации бизнес-логики. Она модифицируется пазами контроллеров.

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

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

Ответил 08/03/2009 в 15:29
источник пользователем

голоса
2

Я не думаю , что какао / OpenStep когда - либо действительно следовали MVC , как это описано, например, SmallTalk 80 . SmallTalk контроллер действительно то , что отвечает за интерпретацию взаимодействия пользователя с видом, который в случае какао обрабатывается NSControl и поэтому видовым слой (возможно , он разлагается таким образом внутри рамки, но мы не должны заглянуть внутрь, вот что абстракция это все о :-). В связи с этим звеньями вашего, слой контроллера в какао действительно попадет под знаменем Presenter, в частности , при рассмотрении различного NS * классы контроллеров из какао креплений. Те действительно челнок между видом слоем и моделью.

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

Ответил 09/12/2008 в 19:37
источник пользователем

голоса
1

Ой-ой. MVC = наиболее исказили картину когда-либо. Я прочитал по крайней мере 5 различных определений этого.

Вы можете прочитать эту статью Мартина Фаулера

Ответил 09/12/2008 в 19:46
источник пользователем

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more