Хорошая библиотека баз данных / ORM для разработки какао - PullRequest
5 голосов
/ 22 ноября 2008

Я разрабатываю приложение для какао, которое будет интенсивно использовать как веб-сервисы, так и стандартные dbms (скорее всего, MySQL), и мне интересно, есть ли у кого-нибудь хороший вариант для библиотеки базы данных или решения ORM, которое они использовали. CoreData не является опцией из-за необходимости поддерживать стандартную СУБД и иметь возможность изменять данные вне обычной работы приложения.

Я нашел несколько возможных вариантов из новых библиотек с открытым исходным кодом: http://github.com/aptiva/activerecord/tree/master

К написанию моей собственной оболочки для API C MySQL.

Любой совет приветствуется,

Спасибо!

Пол

Ответы [ 6 ]

5 голосов
/ 22 января 2009

Мы столкнулись с подобным вопросом, когда впервые начали работу над Оформить заказ , наше решение заключалось в том, чтобы закодировать все приложение на Python, используя PyObjC. Checkout 1 имеет серверную часть sqlite, Checkout 2 имеет серверную часть postgres.

Есть несколько действительно зрелых и мощных ORM на стороне Pyton, таких как SQLObject , с которыми довольно просто работать (мы использовали его для Checkout 1.0) и SQLAlchemy , который является более мощным, но немного сложнее обернуть ваш мозг (мы использовали его для Checkout 2.0).

Один из подходов, который вы можете оценить, - это создание приложения в Objective-C, но написание модели данных и кода подключения / администрирования базы данных на Python. Вы можете использовать PyObjC для создания пакета плагинов из этого кода, который затем загружаете в свое приложение. Это более или менее тот подход, который мы использовали для Checkout Server, который использует инструмент командной строки Foundation для администрирования сервера postgres и баз данных в нем. этот инструмент CLI, в свою очередь, загружается в комплект плагинов Python, в котором содержится весь фактический код базы данных. Конечные пользователи в основном взаимодействуют с базой данных через панель «Системные настройки», которая не имеет представления о том, как выглядит база данных, но вместо этого использует инструмент командной строки для взаимодействия с ней.

Загрузка плагина проста:

NSBundle *pluginBundle = [NSBundle bundleWithPath:pluginPath];
[pluginBundle load];

Возможно, вам потребуется создать файлы .h для классов в вашем комплекте, к которым вы хотите иметь доступ из кода Obj-C.

3 голосов
/ 23 ноября 2008

Возможно, вы также захотите проверить BaseTen framework . Это Core Data-like Framework (на самом деле, он может импортировать модели Core Data), но работает с PostgreSQL (хотя не MySQL, насколько я знаю). Он включает в себя некоторые очень приятные функции, такие как обнаружение схемы во время выполнения. Он также включает в себя подкласс NSArrayController, который автоматически обрабатывает блокировки и синхронизацию между несколькими пользователями, поэтому вы можете продолжать использовать привязку значения ключа Apple в своем пользовательском интерфейсе.

2 голосов
/ 22 ноября 2008

У меня есть личный опыт решения этой конкретной проблемы. Я даже начал писать свою собственную оболочку для C MySQL API.

Окончательный вывод был: не надо!

Решение, которое работало в моем случае, состояло в том, чтобы связаться с сервером MySQL через PHP. Если вы знакомы с веб-сервисами, скорее всего, вы знаете о PHP, поэтому я не буду вдаваться в подробности этого.

Для чтения из базы данных:

  1. Приложение какао отправляет запрос на URL на сервер: http://theserver.com/app/get_values.php
  2. Сценарий get_values.php обрабатывает запрос к базе данных и возвращает данные в формате xml
  3. Приложение какао загружает и анализирует xml

Для записи в базу данных:

  1. Приложение какао отправляет на сервер более сложный запрос: http://theserver.com/app/put_values.php?name="john doe "& age = 21 & address = ...
  2. Сценарий put_values.php анализирует ввод и записывает в базу данных

Прелесть этого решения в том, что PHP отлично подходит для работы с MySQL, а у какао есть несколько удобных встроенных классов для работы с данными XML.

изменить: еще одна вещь:

Одна из ключевых вещей, которую вы должны выяснить с помощью этого подхода, это то, сколько обработки должно быть выполнено на сервере и сколько должно быть сделано в самом приложении. Пусть какао делает то, что хорошо у какао, и пусть PHP и MySQL делают то, что хорошо у него.

Вы можете написать универсальный PHP-скрипт для обработки всех запросов: execute_query.php? Querystring = "SELECT * FROM .....", но это вряд ли является оптимальным решением. Ваша лучшая ставка - это несколько небольших PHP-скриптов, которые обрабатывают отдельные наборы данных для вас. В моем случае был один для получения списка пользователей, один для получения списка транзакций и т. Д. Опять же, все зависит от того, что будет делать ваше приложение.

1 голос
/ 22 января 2009

Вместо того, чтобы заново изобретать колесо, написав свою собственную коммуникационную оболочку для работы с MySQL из Cocoa, вы можете попробовать SMySQL framework (он же MCPKit), это было частью приложения CocoaMySQL, которое превратилось в Проект 1003 * Sequel Pro . Он работает с различными версиями MySQL и кажется довольно надежным.

Если вам нужно понять, как включить его в ваше приложение, документации не так много, но он имеет простой для понимания интерфейс, и вы можете увидеть его работу, посмотрев на источник Sequel Pro, который можно загрузить из Google. код.

Существует также ветвь CocoaMySQL-SBG проекта CocoaMySQL, но она устарела, и я не смог ее правильно собрать.

1 голос
/ 22 ноября 2008

GDL2 - хороший пример, основанный на EOF.

0 голосов
/ 22 ноября 2008

Я также реализовал простую инфраструктуру персистентности объектов, основанную на sqlite, но это, конечно, было не тривиально. Я согласен с выводом eJames: не выполняйте его самостоятельно, если не нужно.

Если вы не привержены программированию в Objective-C, вы можете взглянуть на PyObjC, который позволит вам программировать часть базы данных на Python. Вы можете использовать модуль MySQLdb для доступа к БД, и для его использования есть множество онлайн-руководств. Нетрудно поместить данные обратно в классы Cocoa / CF и передать их обратно в ваше приложение.

Основная оговорка с PyObjC заключается в том, что в данный момент он не работает с Tiger.

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