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

Программирование iOS/iPhone

Войти
Регистрация
Восстановить пароль
 
kievkao
42 / 42 / 2
Регистрация: 22.11.2012
Сообщений: 225
#1

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

13.11.2013, 22:44. Просмотров 530. Ответов 5
Метки нет (Все метки)

Всем привет!

Решил устроить для самообучения серию экспериментов с 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
Посмотрите здесь:

Array в CoreData - Objective-C
Добрый вечер! Как в NSManagedObject хранить массив? Там среди допустимых типов нет массива. Получается, нужно переводить массив в строку, а...

Редактирование CoreData - Программирование iOS
Здравствуйте. Подскажите как можно редактировать содержимое CoreData? Имеется ввиду не добавление/удаление данных из приложения, а...

CoreData , наследование - Программирование iOS
Доброе время суток! Такой вопрос. У меня в модели есть объект "Person". Мне нужно составить таблицу из этих объектов, но чтобы каждый...

CoreData and FetchRequest - Программирование iOS
Hi, столкнулся с проблемкой... Есть БД, юзаю CoreData. В БД есть 2 поля lat,lon - тип данных double. Через визуальный редактор создал...

Сравнения sqlite3 и coredata - Программирование iOS
Добрый день уважаемые форумчане. Расскажите пожалуйста о sqlite3 и coredata кто чем пользовался. Что вы выбираете, для каких целей что...

Plist или coredata - Программирование iOS
Доброго времени суток! В tutorial https://www.youtube.com/watch?v=r6Cn6Kp5ghA&list=PLxqbutB-EOO0WOPOScvFeSkMO0Pw8atiu&index=10 , на 24...

Насколько рационально хранение изображений в CoreData - Программирование iOS
Всем привет! Подскажите, насколько рационально хранить большие изображения напрямую в одном из аттрибутов Entity? С одной стороны...

CoreData: как сохранить только одну entity из множества созданных - Программирование iOS
Добрый день! Не могу разобраться, как сделать вот что: При работе приложения на разных этапах создается несколько сущностей...

CoreData "Список пользователей" - Swift
Всем привет! Ребята, подскажите, как дополнить мою программу, чтобы пользователю, например, User1 соответствовал добавленный asset1,...

Мой первый изменяемый массив - Программирование iOS
Мне необходимо создать несколько изменяемых массивов. NSMutableArray * aMassive = init]; - ругается("Initializer element is not a...


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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
glvrzzz
95 / 71 / 12
Регистрация: 12.12.2012
Сообщений: 214
14.11.2013, 07:09     Покритикуйте мой метод работы с CoreData #2
Думаю, каждый, кто начинал работать с CD, пробовал писать подобные велосипеды (в том числе и я). Дело полезное, но, как мне кажется, только в плане собственного профессионального образования. Переплюнуть такие готовые решения как, например, MagicalRecord все равно вряд ли получится. Если так уж хочется иметь свой любимый фреймворк, то думаю лучше сделать форк от какого-то известного и развивать его как хочешь.
Что касается вашего начинания, то я так понял вы еще не работали с проектами, где не один managedObjectContext и не одна модель. И еще по своему опыту понял, что когда мне хочется создать класс и назвать его ЧтоТоТамМенеджер (да еще и синглтон), это как правило означает проблемы в архитектуре проекта. Да, есть случаи, когда это оптимально, но в большинстве случаев это не так.
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 и за ссылку - буду удалять свой велосипед и читать теорию))
Хорошо, что сразу спросил на форуме.
Монфрид
1194 / 1004 / 153
Регистрация: 07.03.2012
Сообщений: 3,243
Завершенные тесты: 2
14.11.2013, 18:53     Покритикуйте мой метод работы с CoreData #5
ну MagicalRecord на порядок сокращает проблемы с CoreData, так что однозначно её надо использовать
zulkis
681 / 608 / 38
Регистрация: 13.01.2011
Сообщений: 1,724
14.11.2013, 19:05     Покритикуйте мой метод работы с CoreData #6
Монфрид, ну нет, на порядок проблемы сокращает понимание, Но никак не MagicalRecord
Yandex
Объявления
14.11.2013, 19:05     Покритикуйте мой метод работы с CoreData
Ответ Создать тему
Опции темы

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