Доступ к модели и создание в Cocoa Touch - PullRequest
0 голосов
/ 16 сентября 2011

Мне интересно, какие у меня есть варианты для создания модели и как получить доступ к модели из ViewControllers?Предполагая, что приложение является нетривиальным, и одна модель должна совместно использоваться несколькими ViewControllers, где должна создаваться модель и как к ней должны обращаться ViewControllers?

Существует множество сред ActionScript, которые решают эту проблему с помощью IOC./ Dependency Injection или, в худшем случае, Model Locator, но в Cocoa Touch нет ничего похожего.Из многочисленных примеров кода и проектов видно, что большинство людей выполняют одно из следующих действий:

  1. Объявляют свои модели в ApplicationDelegate и получают к ним доступ через него (используя его как своего родаРеестр, который, по крайней мере, означает, что сами модели не обязательно должны быть синглетонами, но в конечном итоге его сложно протестировать и он плохо спроектирован.

  2. Имейте все свои модели как синглтоны (плохо по понятным причинам)

  3. Передача моделей между их ViewControllers, что приводит к большому количеству ненужного кода и может привести к тому, что некоторые ViewController будут пересылать ссылки на Модели другим ViewController, даже не обращаясь к ним самим.

Разумеется, есть лучшее решение? Мне кажется странным, что инфраструктура так предписывает тесную связь между UIViews и ViewControllers, но не предлагает руководства или решения для подключения Model /Уровень обслуживания. Я миссЧто-то очевидное?

1 Ответ

0 голосов
/ 16 сентября 2011

В зависимости от размера вашей модели, Core Data - это отсутствующее «соединение».Базовые данные позволяют легко связать вашу модель с контроллерами представления и перенести эти данные в представление.

Если вы не хотите использовать Core Data, возможно, причина в том, что нет шаблона моделиэто потому, что в них нет ничего особенного - они просто хранят данные.Существуют определенные доступные классы, которые помогут вам в хранении и удалении данных (см., Например, NSCache), но помимо этого ваши классы моделей могут быть просто подклассом NSObject с некоторыми общедоступными свойствами и / или пользовательскими средствами доступа.

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

Надеюсь, это поможет - извините, если я неправильно истолковал вопрос!

...