Существует ли структура ORM для Какао или структура, которая выполняет аналогичную задачу, используя другой метод? - PullRequest
3 голосов
/ 17 ноября 2009

Я разрабатываю приложение, которое должно хранить множество записей организованным способом. В частности, я пишу приложение для личных финансов. Как вы можете себе представить, это приложение будет содержать записи финансовых транзакций, которые должны быть отсортированы различными способами: по дате, по сумме, по получателю, по счету и т. Д. И, конечно, приложению нужно будет быстро получить, скажем, все транзакции между определенными датами, быстрое суммирование некоторых записей и т. д.

Я все еще на этапе разработки, и я планирую использовать SQLite в качестве внутреннего хранилища для приложения, поскольку OS X уже поставляется с платформой SQLite. Я подумал, что было бы неплохо абстрагироваться от уровня соединения с базой данных, чтобы я мог повторно использовать код в других проектах, а потом подумал, что, возможно, кто-то еще мог это уже сделать.

Тогда я подумал, что это может быть не очень хорошая идея. Я прочитал немного о CoreData на OS X и подумал, что, возможно, мне следует использовать CoreData для этой цели. Однако я не знаю, соответствует ли CoreData моим целям. Это больше похоже на способ абстрагировать контроллеры приложения и привязать виджеты пользовательского интерфейса к моделям, а не предоставлять API, который позволяет быстро и легко выполнять, возможно, сложные запросы к структурированным данным.

Так что мой вопрос на самом деле состоит из трех взаимосвязанных частей:

  1. Есть ли ORM для какао? Я ищу что-то вроде слоя Django ORM или RailR 'ActiveRecord. (Мне нужно только это для подключения к базам данных SQLite.)
  2. Или я должен просто использовать CoreData для этого? Будет ли это хорошо соответствовать моим потребностям?
  3. Или я лаю не на том дереве и должен искать другую структуру, которая выполняет мои цели с помощью другой техники?

Ответы [ 4 ]

6 голосов
/ 17 ноября 2009

Самым близким к ORM, который поставляется с Какао, является CoreData. Это не тихий ORM, а скорее граф объектов в памяти, который можно сериализовать на диск.

Он использует общий макет на основе модели, и вы можете добавлять вспомогательные функции и тому подобное к указанным моделям. Он может поддерживать ссылочную целостность и тому подобное, и не требует использования SQL.

Может иметь один из трех бэкэндов хранилища, рекомендуемый SQLLite. Я использовал его для моего текущего приложения. Однако после некоторого тестирования я обнаружил, что он слишком тяжелый. Это должно быть намного лучше в 10.5+, но я нацеливаюсь на 10.4, и я обнаружил, что он слишком жадный / медленный для моих нужд.

Что касается запросов, вы делаете большинство (все?) Запросов через NSPredicates, а затем вы можете использовать конструкцию в стиле foreignKey для доступа к связанным моделям. Это может быть очень полезно.

Является ли он таким же полнофункциональным, как ActiveRecord, ORM Джанго или SQLAlchemy? Но это очень хорошо.

Я бы порекомендовал создать прототип с ним и попытаться понять, как это работает для вас. Для дальнейшего чтения я бы порекомендовал Базовая книга данных с Прагматической книжной полки. Я прочитал его и в целом нашел, что он очень полезен для понимания основных данных.

2 голосов
/ 17 ноября 2009

Есть ли ORM для какао? я ищу для чего-то вроде слоя ORM Джанго, или Rails 'ActiveRecord. (Мне нужно только это подключиться к базам данных SQLite, хотя.)

Технически, нет.

Или я должен просто использовать CoreData для этот? Будет ли это хорошо соответствовать моим потребностям?

Вы можете попробовать, но CoreData вряд ли подойдет. CoreData имеет некоторые функции, подобные ORM, но на самом деле это не ORM.

Или я лаю не на том дереве, и должен смотреть на другую структуру что достигает моих целей с другая техника?

Есть альтернативы, но ничего, что подходит к нативному ORM Какао. Одним из таких вариантов является использование Java ORM, такого как Hibernate, который вы затем вызываете из своего кода Какао.

На самом деле вам не нужен ORM. Вы можете создать упрощенную ORM самостоятельно поверх платформы OSX SQLLite. Если вы затем откроете исходный код своего упрощенного ORM, у этого вопроса будет лучший ответ. :)

0 голосов
/ 12 июня 2014

В качестве альтернативы Core Data, вы можете попробовать YapDatabase , это не ORM, но вы можете заменить многие вещи, которые вы обычно делаете с ORM, некоторыми из этих функций. И гораздо проще в использовании, чем Core Data.

0 голосов
/ 17 ноября 2009

Вы должны использовать CoreData. Работает с SQLite-подобными запросами.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...