CoreData обычно используется в качестве модели или это деталь реализации инфраструктуры? - PullRequest
3 голосов
/ 26 июня 2010

Я хотел бы использовать базу данных Sqlite в приложении для iphone.Пример из книги, которую я читаю, содержит контроллеры, непосредственно вызывающие объекты CoreData.

Для меня это, исходя из MVC / MVP в .NET, сродни открытию соединения SQL в обработчике событий кнопки.У меня обычно был бы репозиторий, который обрабатывал детали извлечения / сохранения модели.

1) Является ли нормой использование функциональности CoreData непосредственно в контроллере?

2) Извлекает ли мой доменмоделирование в отдельные классы, которые переводятся туда и обратно на уровень персистентности, не очень хорошая идея для iPhone (в отношении производительности, памяти, ожидаемой организации проекта и т. д.)?

3) Будет ли работать создание слоя репозиторияхорошо на айфоне?

Переход на фон SmallTalk Objective-C и подход MVC для приложений iPhone. Я ожидал использовать доменные модели, репозитории, IoC и т. Д.

Это просто нереально?Мы с автором просто на разных страницах?Спасибо за любой вклад.

Ответы [ 2 ]

2 голосов
/ 27 июня 2010

Да, базовые данные обычно используются в качестве модели. Если я правильно понимаю, что вы говорите правильно, вы ожидаете слой между фактическим хранилищем данных и контроллером. Базовые данные - это тот уровень, который (иногда) реализован в sqlite, так что вы никогда не используете sqlite напрямую. Я думаю, что это источник вашей путаницы - вы не должны использовать оба в одном проекте для одних и тех же данных.

2 голосов
/ 26 июня 2010

iPhone SDK соответствует шаблону MVC, но также и многим другим (делегат). Так что это может быть не так строго, как другие языки, которые вы упомянули. Чтобы ответить на ваши вопросы:

  1. У вас неизбежно будет какой-то доступ к вашим моделям с вашего контроллера. До тех пор, пока реализация этих действий обрабатывается в Модели, вы следуете шаблону MVC. Это обеспечивается CoreData Framework. Итак, в конце концов, это ваш DAO, ActiveRecord и т. Д.

  2. Вы можете генерировать классы модели (Model.m / h), если хотите добавить дополнительные функциональные возможности. Однако CoreData обычно создает их для вас на лету.

  3. Я не совсем понимаю это без фона .NET, но думаю, что мой ответ на ваш первый вопрос мог ответить на него косвенно.

Я не могу говорить с книгой, которую вы читаете, но, возможно, вам лучше увидеть некоторые дополнительные ссылки. Ознакомьтесь с Основными данными в Справочных документах АЦП, а также с одним из примеров проектов - CoreDataBooks.

...