Форум программистов, компьютерный форум, киберфорум
Наши страницы

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

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

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

13.11.2013, 22:44. Просмотров 572. Ответов 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 у меня лежит в одном единственном классе.
Создал новый проект - подключил фреймворк, перенес мой "менеджер", в нем реализовал разбор классов, которые буду читать/сохранять в БД, и можно работать. Так я это вижу))

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

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

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

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

Сравнения 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? С одной стороны...

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

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

Спасибо всем большое за комментарии, за информацию о MagicalRecord и за ссылку - буду удалять свой велосипед и читать теорию))
Хорошо, что сразу спросил на форуме.
0
Монфрид
1199 / 1009 / 154
Регистрация: 07.03.2012
Сообщений: 3,243
Завершенные тесты: 2
14.11.2013, 18:53 #5
ну MagicalRecord на порядок сокращает проблемы с CoreData, так что однозначно её надо использовать
0
zulkis
683 / 610 / 38
Регистрация: 13.01.2011
Сообщений: 1,724
14.11.2013, 19:05 #6
Монфрид, ну нет, на порядок проблемы сокращает понимание, Но никак не MagicalRecord
0
14.11.2013, 19:05
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
14.11.2013, 19:05
Привет! Вот еще темы с ответами:

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

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

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

Покритикуйте мой скрипт резервного копирования файлов - Bash
Покритикуйте мой скрипт, создающий резервные копии всех файлов текущего каталога и перемещающий их в новый каталог. #!/bin/sh ...


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

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Опции темы

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