Форум программистов, компьютерный форум CyberForum.ru

Покритикуйте мой метод работы с CoreData - Программирование iOS/iPhone

Восстановить пароль Регистрация
 
kievkao
42 / 42 / 2
Регистрация: 22.11.2012
Сообщений: 225
13.11.2013, 22:44     Покритикуйте мой метод работы с CoreData #1
Всем привет!

Решил устроить для самообучения серию экспериментов с CoreData, и возникла идея организовать работу с этим фреймворком немного нестандартным методом. Настораживает тот факт, что во всех примерах в интернете структура проектов с использованием CoreData имеет, фактически, один и тот же вид, а моя реализация от него сильно отличается.
Был бы рад, если бы мне вкратце указали, почему мой подход неправильный)) Либо подтвердили, что таким образом работать можно, и ничего плохого не случится.

Итак, с чего все началось: я очень люблю модульность в проекте, когда каждый отдельный класс, либо группа классов выполняет одну какую-то функцию, и не перемешивает в себе разный функционал. И мне очень не нравилось, хотя бы чисто визуально, что во всех примерах на тему "Введение в CoreData", что в файлах AppDelegate.h/.m находятся все эти ObjectContext, ObjectModel и т.д.
И я решили попробовать сделать так:

1. Создать отдельный класс-синглтон с именем, например, CoreDataManager.
2. В нем реализовать все необходимые стандартные методы для CoreData (managedObjectContext, managedObjectModel, и т.д.)
3. В нем же реализовать методы доступа вида:
Objective-C
1
2
(NSMutableArray *)fetchAllItemsByClass:(Class)classToFetch sortBy:(NSString *)sortKey
(BOOL)insertNewItem:(id)item
В методе insertNewItem я определяю, объект какого класса мне пришел на вход, и соответствующим образом сохраняю его поля.
В методе fetchAllItemsByClass аналогично определяю класс, объекты которого мне надо достать из БД, и выполняю чтение.
(пока реализовал самый примитивный функционал, чтобы проверить работоспособность)

Получается, я в любом файле проекта могу подключить всего один h-файл, взять instance моего CoreDataManager и легко записать/прочитать из него данные. И весь код по работе с CoreData у меня лежит в одном единственном классе.
Создал новый проект - подключил фреймворк, перенес мой "менеджер", в нем реализовал разбор классов, которые буду читать/сохранять в БД, и можно работать. Так я это вижу))

Как вы считаете, стоит расширять такой "менеджер", чтобы сделать его максимально универсальным, или сам подход в корне не верный?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
13.11.2013, 22:44     Покритикуйте мой метод работы с CoreData
Посмотрите здесь:

Сравнения sqlite3 и coredata
Objective-C Создать метод
CoreData , наследование
Objective-C Array в CoreData
CoreData and FetchRequest
Мой способ взаимодействия с серверными разработчиками
Plist или coredata
Редактирование CoreData
Насколько рационально хранение изображений в CoreData
Мой первый изменяемый массив
CoreData: как сохранить только одну entity из множества созданных
Swift CoreData "Список пользователей"

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
glvrzzz
95 / 71 / 12
Регистрация: 12.12.2012
Сообщений: 214
14.11.2013, 07:09     Покритикуйте мой метод работы с CoreData #2
Думаю, каждый, кто начинал работать с CD, пробовал писать подобные велосипеды (в том числе и я). Дело полезное, но, как мне кажется, только в плане собственного профессионального образования. Переплюнуть такие готовые решения как, например, MagicalRecord все равно вряд ли получится. Если так уж хочется иметь свой любимый фреймворк, то думаю лучше сделать форк от какого-то известного и развивать его как хочешь.
Что касается вашего начинания, то я так понял вы еще не работали с проектами, где не один managedObjectContext и не одна модель. И еще по своему опыту понял, что когда мне хочется создать класс и назвать его ЧтоТоТамМенеджер (да еще и синглтон), это как правило означает проблемы в архитектуре проекта. Да, есть случаи, когда это оптимально, но в большинстве случаев это не так.
zulkis
 Аватар для zulkis
681 / 608 / 38
Регистрация: 13.01.2011
Сообщений: 1,724
14.11.2013, 09:06     Покритикуйте мой метод работы с CoreData #3
kievkao, видите ли в чем соль, CD это немного не "обертка нас SQLite-ом". Ваше решение не годится для тех проектов, в которых по 10+ контекстов(что бывает достаточно часто), оно также не подходит для многопоточных приложений.
На мой взгляд работа с CD не должна происходить по принципу "1 синглтон". Учитывая то, что сама концепция не подразумевает этого.
Для того, чтобы понять, какие архитектурные варианты можно использовать с CD - можно почитать для начала это.
kievkao
42 / 42 / 2
Регистрация: 22.11.2012
Сообщений: 225
14.11.2013, 14:20  [ТС]     Покритикуйте мой метод работы с CoreData #4
Уже после слов
Цитата Сообщение от glvrzzz Посмотреть сообщение
...с проектами, где не один managedObjectContext и не одна модель
понял, что написал фигню.
О том, что их может быть несколько, я и не подозревал))

Я когда-то сделал такой синглтон-"менеджер" (конкретно, по работе с SQLite) в небольшом проекте под Андроид, и мне, помнится, та реализация понравилась. Вспомнил ее, и решил перенести и в iOS))

Спасибо всем большое за комментарии, за информацию о MagicalRecord и за ссылку - буду удалять свой велосипед и читать теорию))
Хорошо, что сразу спросил на форуме.
Монфрид
 Аватар для Монфрид
1185 / 995 / 153
Регистрация: 07.03.2012
Сообщений: 3,243
Завершенные тесты: 2
14.11.2013, 18:53     Покритикуйте мой метод работы с CoreData #5
ну MagicalRecord на порядок сокращает проблемы с CoreData, так что однозначно её надо использовать
zulkis
 Аватар для zulkis
681 / 608 / 38
Регистрация: 13.01.2011
Сообщений: 1,724
14.11.2013, 19:05     Покритикуйте мой метод работы с CoreData #6
Монфрид, ну нет, на порядок проблемы сокращает понимание, Но никак не MagicalRecord
Yandex
Объявления
14.11.2013, 19:05     Покритикуйте мой метод работы с CoreData
Ответ Создать тему
Опции темы

Текущее время: 19:01. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru