Core Data es un marco de trabajo de persistencia y grafos de objetos proporcionado por Apple en los sistemas operativos macOS e iOS . Se introdujo en Mac OS X 10.4 Tiger e iOS con el SDK 3.0 de iPhone. [ 1 ] Permite serializar datos organizados por el modelo relacional entidad-atributo en almacenes XML , binarios o SQLite . Los datos se pueden manipular utilizando objetos de nivel superior que representan entidades y sus relaciones. Core Data gestiona la versión serializada, proporcionando gestión del ciclo de vida y del grafo de objetos , incluyendo la persistencia . Core Data interactúa directamente con SQLite , aislando al desarrollador del SQL subyacente . [ 2 ]
Así como Cocoa Bindings se encarga de muchas de las funciones del controlador en un diseño modelo-vista-controlador , Core Data se encarga de muchas de las funciones del modelo de datos. Entre otras tareas, gestiona los cambios, serializa los datos en disco, minimiza el consumo de memoria y realiza consultas sobre ellos.
Uso
Core Data describe los datos mediante un modelo de datos de alto nivel, expresado en términos de entidades y sus relaciones, además de solicitudes de recuperación que obtienen entidades que cumplen criterios específicos. El código puede recuperar y manipular estos datos a nivel de objeto, sin preocuparse por los detalles de almacenamiento y recuperación. Los objetos de controlador disponibles en Interface Builder pueden recuperar y manipular estas entidades directamente. Al combinarse con los enlaces de Cocoa, la interfaz de usuario puede mostrar muchos componentes del modelo de datos sin necesidad de código de fondo.
Por ejemplo: un desarrollador podría estar escribiendo un programa para gestionar vCards . Para ello, el autor pretende leer las vCards y convertirlas en objetos, para luego almacenarlas en un único archivo XML de mayor tamaño. Utilizando Core Data, el desarrollador arrastraría su esquema desde el diseñador de datos de Xcode a una ventana del generador de interfaces para crear una interfaz gráfica de usuario (GUI) para su esquema. A continuación, podría escribir código estándar en Objective-C o Swift para leer los archivos vCard y colocar los datos en entidades gestionadas por Core Data. A partir de ese momento, el código del autor manipula estos objetos de Core Data, en lugar de las vCards subyacentes. Conectar el Saveelemento de menú al método apropiado en el objeto controlador hará que este examine la pila de objetos, determine qué objetos están modificados y, a continuación, reescriba un archivo de documento de Core Data con estos cambios.
Core Data está organizado en una amplia jerarquía de clases, aunque la interacción solo es frecuente con un pequeño conjunto de ellas.
Formatos de almacenamiento
Core Data puede serializar objetos en XML, binario o SQLite para su almacenamiento. [ 2 ] Con el lanzamiento de Mac OS X 10.5 Leopard , los desarrolladores también pueden crear sus propios tipos de almacenamiento atómico personalizados . Cada método tiene ventajas y desventajas, como ser legible para humanos (XML) o ser más eficiente en el uso de memoria (SQLite).
Esta parte de Core Data es similar al sistema original de Enterprise Objects Framework (EOF), ya que permite escribir consultas bastante sofisticadas. A diferencia de EOF, no es posible escribir SQL propio, puesto que el almacén subyacente podría no estar basado en SQL. Recientemente, el almacén de Core Data para ODBC se ha incorporado al marco de trabajo ODBC . [ 6 ]
Los esquemas de Core Data están estandarizados. Si dispone del archivo del modelo de datos de Xcode, puede leer y escribir archivos en ese formato libremente. Sin embargo, a diferencia de EOF, Core Data no está diseñado actualmente para el acceso multiusuario o simultáneo, a menos que utilice el marco de trabajo ODBC. [ 6 ]
La migración de esquemas tampoco es trivial y casi siempre requiere código. Si otros desarrolladores tienen acceso a tu modelo de datos y dependen de él, es posible que debas proporcionar código de traducción de versiones además de un nuevo modelo de datos si tu esquema cambia.
Historia y génesis
Core Data debe gran parte de su diseño a un producto anterior de NeXT , Enterprise Objects Framework (EOF). [ 7 ]
EOF era un mapeo objeto-relacional para motores de bases de datos SQL de alto rendimiento, como Microsoft SQL Server y Oracle . Su propósito era doble: primero, conectarse al motor de base de datos y ocultar los detalles de implementación; segundo, leer los datos del formato relacional y convertirlos en un conjunto de objetos. Los desarrolladores solían interactuar únicamente con los objetos, lo que simplificaba el desarrollo de programas complejos, aunque requería cierta configuración para mapear los datos a los objetos. El modelo de objetos EOF se diseñó deliberadamente para que los programas resultantes funcionaran como documentos; el usuario podía editar los datos localmente en memoria y luego guardar todos los cambios con un solo comando Guardar.
A lo largo de su historia, EOF contenía varias partes de código útil que no estaban disponibles en NeXTSTEP / OpenStep . Por ejemplo, EOF requería la capacidad de rastrear qué objetos estaban modificados para que el sistema pudiera escribirlos posteriormente. Esto se presentaba al desarrollador no solo como un sistema similar a un documento, sino también en forma de una pila ilimitada de comandos de deshacer, donde cada comando aplicado a los datos se representaba como una acción deshacible. Muchos desarrolladores se quejaron de que este código de gestión de estado era demasiado útil como para estar aislado en EOF, y posteriormente se trasladó a la API de Cocoa durante la transición a Mac OS X.
Inicialmente, lo que no se tradujo fue el propio EOF. Este se utilizaba principalmente junto con otro producto de la era OpenStep, WebObjects , un servidor de aplicaciones originalmente basado en Objective-C . En aquel momento, Apple estaba en proceso de portar WebObjects al lenguaje de programación Java , y como parte de esta conversión, el uso de EOF se volvió mucho más difícil desde Cocoa. Una vez más, hubo numerosas quejas entre los desarrolladores externos.
Una conclusión fundamental es que el sistema de gestión del estado de los objetos en EOF no tenía realmente nada que ver con las bases de datos relacionales. El mismo código podía ser utilizado, y de hecho lo era, por los desarrolladores para gestionar también grafos de otros objetos. En este sentido, las partes realmente útiles de EOF eran aquellas que construían automáticamente los conjuntos de objetos a partir de los datos brutos y luego les daban seguimiento. Este concepto constituye la base de Core Data.
Notas
- ↑ Apple, "Tutorial de Core Data para iPhone OS".
- 1 2 3 Apple, "Guía de programación de Core Data".
- ↑ Zarra, Core Data .
- ↑ Stevenson, "Descripción general de la clase de datos principales"
- ↑ Jurewitz, "Trabajando con datos básicos"
- 1 2 Github, "Marco de trabajo ODBC"
- ↑ Apple, "Guía del usuario de EOModeler"
Referencias
- Apple Inc. (17 de septiembre de 2009). "Guía de programación de Core Data". Recuperado de https://developer.apple.com/iphone/library/documentation/Cocoa/Conceptual/CoreData/cdProgrammingGuide.html
- Apple Inc. (9 de septiembre de 2009). "Tutorial de Core Data para iPhone OS". Recuperado de https://developer.apple.com/iphone/library/documentation/DataManagement/Conceptual/iPhoneCoreData01/Introduction/Introduction.html
- Apple Inc. (2006). "Guía del usuario de EOModeler". Recuperado de https://developer.apple.com/legacy/mac/library/documentation/WebObjects/UsingEOModeler/Introduction/Introduction.html#//apple_ref/doc/uid/TP30001018-CH201-TP1
- Jurewitz, M. y Apple Inc. (2010). "Vídeos de desarrollo para iPhone: Trabajando con Core Data". Recuperado de https://developer.apple.com/videos/iphone/#video-advanced-coredata
- Stevenson, S. (2005). "Descripción general de la clase Core Data". Recuperado de http://cocoadevcentral.com/articles/000086.php
- Zarra, MS (2009). Core Data, la API de Apple para la persistencia de datos en Mac OS X. The Pragmatic Programmers.
- LaMarche, J., & Mark, D. (2009). Más desarrollo para iPhone 3: Abordando el iPhone SDK 3. Apress.
Enlaces externos
- Apple Inc. (2018). "Core Data". Recuperado de https://developer.apple.com/documentation/coredata
- Apple Inc. (2009). "Tutorial de objetos web". Recuperado de https://developer.apple.com/legacy/mac/library/documentation/DeveloperTools/Conceptual/WOTutorial/Introduction/Introduction.html
- CocoaDev. (s.f.). Recuperado de https://web.archive.org/web/20080801025517/http://www.cocoadev.com/
- GitHub. "Marco de trabajo ODBC". https://github.com/mhakman/osx-cocoa-odbc
- mFluent LLC. "Ver archivos de persistencia de Core Data". https://github.com/yepher/CoreDataUtility
- Stevenson, S. (2005). "Crea una aplicación de datos básicos". Recuperado de http://cocoadevcentral.com/articles/000085.php
- API de macOS
- Modelado de datos
- Software de gestión de datos
- Persistencia
- Objetivo-C
- Próximo
