2008-11-21 7 views
5

Estoy desarrollando una aplicación de cacao que hará un uso intensivo tanto de servicios web como de un dbms estándar (probablemente MySQL) y me pregunto si alguien tiene una buena opción para una biblioteca de base de datos o la solución ORM que han utilizado. CoreData no es una opción debido a la necesidad de admitir un DBMS estándar y poder modificar los datos fuera de la operación normal de la aplicación.Buena biblioteca de base de datos/ORM para el desarrollo de cacao

Me han encontrado una serie de posibles opciones de nuevas bibliotecas de código abierto: http://github.com/aptiva/activerecord/tree/master

Para escribir mi propio envoltorio de la API C de MySQL.

Cualquier consejo es bienvenido,

¡Gracias!

Paul

+0

Hola, muchas gracias por las sugerencias chicos, voy a ver algunas de las opciones - No estoy casado de ninguna manera con MYSQL, simplemente resulta ser lo que usamos en nuestros servidores para nuestras aplicaciones web, así que estaba tratando de ser coherente para futuros propósitos de mantenimiento :) – paulthenerd

Respuesta

5

Nos enfrentamos a una pregunta similar cuando comenzamos a trabajar en Checkout, nuestra solución era codificar toda la aplicación en Python, utilizando PyObjC. Checkout 1 tenía un back-end sqlite, Checkout 2 tiene un backend postgres.

Hay un par de ORM muy maduros y de gran alcance en el lado Pyton, como SQLObject, que es bastante fácil de trabajar (lo usamos para Pedido 1,0) y SQLAlchemy, que es más potente, pero un poco más difícil de envuelve tu cerebro (lo usamos para Checkout 2.0).

Un enfoque que podría evaluar es construir la aplicación en Objective-C, pero escribiendo el modelo de datos y el código de conectividad/administración de bases de datos en Python. Puede usar PyObjC para crear un paquete de complementos a partir de este código, que luego carga en su aplicación. Ese es más o menos el enfoque que utilizamos para Checkout Server, que utiliza una herramienta de línea de comandos de Foundation para administrar un servidor Postgres y las bases de datos en él. , esta herramienta CLI a su vez se carga en un paquete de complementos de Python que tiene todo el código de la base de datos real en él. Los usuarios finales principalmente interactúan con la base de datos a través de un panel de Preferencias del sistema, que no tiene ni idea de cómo se ve la base de datos, sino que utiliza la herramienta de línea de comandos para interactuar con ella.

La carga de un plugin es simple:

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

es probable que necesite para crear archivos .h para las clases en su paquete que desea tener acceso a su código de Obj-C.

1

GDL2 es un buen ejemplo, basándose en EOF.

2

Tengo experiencia personal con este problema en particular. Incluso comencé a escribir mi propio contenedor para la API C MySQL.

La conclusión final fue: ¡No!

La solución que funcionó en mi caso fue la de comunicarme con el servidor MySQL a través de PHP. Si está familiarizado con los servicios web, lo más probable es que conozca PHP, así que no entraré en muchos detalles al respecto.

para leer desde la base de datos:

  1. La aplicación de cacao envía una solicitud para una dirección URL en el servidor: http://theserver.com/app/get_values.php
  2. El guión get_values.php se ocupa de la consulta de base de datos y devuelve los datos en formato XML
  3. las cargas de aplicaciones de cacao y analiza el código XML

escribir en la base de datos:

  1. La aplicación envía una petición de cacao más complejo al servidor: http://theserver.com/app/put_values.php?name="john doe "y la edad = 21 & address = ...
  2. El put_values.php script analiza la entrada y escribe en la base de datos

La belleza de esta solución es que PHP es ideal para trabajar con MySQL, y cocoa tiene algunas prácticas clases incorporadas para trabajar con datos XML.

edición: una cosa más:

Una de las cosas clave que usted tiene que averiguar con este enfoque es la cantidad de procesamiento que debe hacerse en el servidor, y cuánto debe hacerse en la propia aplicación . Deje que el cacao haga las cosas en las que es bueno el cacao, y permita que PHP y MySQL hagan las cosas en las que son buenos.

Puede escribir un script PHP genérico para manejar todos consultas: perform_query.php? Querystring = "SELECCIONAR * FROM .....", pero esa no es una solución óptima. Su mejor opción es varias secuencias de comandos PHP más pequeñas que manejan conjuntos de datos individuales para usted.En mi caso, había uno para obtener la lista de usuarios, uno para obtener la lista de transacciones, etc. Nuevamente, todo depende de lo que su aplicación vaya a hacer.

0

También he implementado un marco de persistencia de objetos simple basado en sqlite, pero ciertamente no fue trivial. Estoy de acuerdo con la conclusión de eJames, no implemente uno usted mismo si no es necesario.

Si no está comprometido con la programación en Objective-C es posible que desee echar un vistazo a PyObjC que le permitiría programar la parte de la base de datos en Python. Puede utilizar el módulo MySQLdb para acceso a bases de datos y hay muchos tutoriales en línea para su uso. No es difícil volver a meter los datos en las clases Cocoa/CF y pasarlos de vuelta a su aplicación.

La advertencia principal con PyObjC es que por el momento no funciona con Tiger.

+0

PyObjC 1 funciona bien en Tiger. PyObjC 2, que se envió con Leopard aún no funciona con Tiger, aunque eso podría cambiar pronto. –

3

Es posible que también desee comprobar el BaseTen framework. Es un marco similar al de Core Data (de hecho, puede importar modelos de Core Data), pero funciona con PostgreSQL (aunque no MySQL, hasta donde yo sé). Incluye algunas características muy agradables, como el descubrimiento de esquemas en tiempo de ejecución. También incluye una subclase NSArrayController que maneja automáticamente el bloqueo y la sincronización a través de múltiples usuarios, para que pueda continuar utilizando el enlace de clave-valor de las manzanas en su UI.

1

vez de reinventar la rueda escribiendo su propio envoltorio de comunicación para hacer frente a MySQL desde Cocoa, puede probar con el marco SMySQL (MCPKit alias), que era parte de la aplicación CocoaMySQL que se desarrolló en el proyecto Sequel Pro. Funciona con diversas versiones de MySQL, y parece ser bastante robusto.

Si necesita comprender cómo incorporarlo a su aplicación, no hay mucha documentación a su alrededor, pero tiene una interfaz fácil de entender y puede verlo funcionando al buscar en la fuente de Sequel Pro, que se puede descargar desde Código de Google

También está la horquilla CocoaMySQL-SBG del proyecto CocoaMySQL, pero parece estar desactualizada y no pude conseguir que se construya correctamente.

Cuestiones relacionadas