El manual que falta
para el desarrollo de Swift
La guía que desearía haber tenido cuando empecé
Únete a más de 20.000 desarrolladores que están aprendiendo sobre el desarrollo de Swift
Descarga tu copia gratuita
Si estás leyendo esto, supongo que eres nuevo en Core Data. Puede que hayas oído hablar de Core Data y te gustaría saber si es una buena opción para ti o para el proyecto en el que estás trabajando. Si esta descripción se ajusta a ti, entonces toma asiento. Este tutorial de Core Data le enseña todo lo que necesita saber para entender mejor lo que es y lo que no es Core Data.
- Qué es Core Data
- Cuáles son sus orígenes
- ¿Dónde encaja
- Gestión de un grafo de objetos
- Cuándo utilizar Core Data
- ¿En qué se diferencia de SQLite
- SQLite
- Core Data
- Limitaciones de Core Data
- Explorando la pila de Core Data
- Modelo de objetos gestionados
- Contexto de objetos gestionados
- Coordinador del almacén persistente
- Almacén persistente
- – un almacén en memoria
- ¿Cómo funciona la pila de Core Data
- En pocas palabras
Qué es Core Data
Los desarrolladores nuevos en el marco de trabajo muy a menudo no se toman el tiempo para aprender lo que es Core Data. No saber qué es el Core Data, hace que sea muy difícil entender sus entresijos. Me gustaría dedicar unos minutos a explorar la naturaleza de Core Data y, sobre todo, a aclarar qué es y qué no es Core Data.
Cuáles son sus orígenes
Core Data es un framework desarrollado y mantenido por Apple. Existe desde hace más de una década y apareció por primera vez en macOS con el lanzamiento de macOS Tiger en 2005. En 2009, la compañía hizo que el framework estuviera disponible en iOS con el lanzamiento de iOS 3.
¿Dónde encaja
Core Data es la M de MVC, la capa de modelo de tu aplicación. Aunque Core Data puede persistir los datos en el disco, la persistencia de datos es en realidad una característica opcional del framework. Core Data es, ante todo, un marco de trabajo para la gestión de un gráfico de objetos.
Probablemente haya oído y leído sobre Core Data antes de tomar este curso. Eso significa que puede que ya sepa que Core Data no es una base de datos y que gestiona el grafo de objetos de su aplicación. Ambas afirmaciones son ciertas. Pero, ¿qué significan realmente?
Gestión de un grafo de objetos
Core Data gestiona, ante todo, un grafo de objetos. Un gráfico de objetos no es más que una colección de objetos que están conectados entre sí. El framework Core Data destaca en la gestión de grafos de objetos complejos.
Se encarga de gestionar el ciclo de vida de los objetos del grafo de objetos y, opcionalmente, puede persistir el grafo de objetos en el disco. También ofrece una potente interfaz para buscar en el gráfico de objetos que gestiona.
Pero Core Data es mucho más que eso. El marco de trabajo añade una serie de otras características convincentes, como la validación de entrada, la versión del modelo de datos y el seguimiento de los cambios.
Cuándo utilizar Core Data
El marco de trabajo es un ajuste perfecto para una amplia gama de aplicaciones, pero no todas las aplicaciones deben utilizar Core Data. Las aplicaciones que necesitan una capa de modelo ligera no deberían usar Core Data. Hay muchas bibliotecas ligeras que proporcionan este tipo de funcionalidad.
Si estás buscando una envoltura de SQLite, entonces Core Data tampoco es lo que necesitas. Para una envoltura de SQLite ligera y de alto rendimiento, recomiendo encarecidamente FMDB de Gus Mueller. Esta robusta y madura librería proporciona una interfaz orientada a objetos para interactuar con SQLite.
Core Data es una excelente opción si quiere una solución que gestione la capa del modelo de su aplicación.
¿En qué se diferencia de SQLite
Los desarrolladores que no conocen Core Data a menudo se sienten confundidos por las diferencias entre SQLite y Core Data. Si se pregunta si necesita SQLite o Core Data, entonces está haciendo la pregunta equivocada. Recuerde que Core Data no es una base de datos.
SQLite
SQLite es una base de datos ligera que tiene un gran rendimiento y, por lo tanto, es una buena opción para las aplicaciones móviles. Aunque SQLite se anuncia como una base de datos relacional, es importante tener en cuenta que usted, el desarrollador, se encarga de mantener las relaciones entre los registros almacenados en la base de datos.
Core Data
Core Data va mucho más allá. Proporciona una abstracción que permite interactuar con la capa del modelo de forma orientada a objetos. Cada registro con el que se interactúa es un objeto. Core Data es responsable de la integridad del gráfico de objetos. Garantiza que el grafo de objetos se mantenga actualizado.
Limitaciones de Core Data
Aunque Core Data es un marco de trabajo fantástico, hay varios inconvenientes. Estos inconvenientes están directamente relacionados con la naturaleza del framework y su funcionamiento.
Core Data sólo puede hacer su magia porque mantiene el gráfico de objetos que gestiona en memoria. Esto significa que sólo puede operar en los registros una vez que están en la memoria. Esto es muy diferente a realizar una consulta SQL en una base de datos. Si quiere eliminar miles de registros, Core Data tiene que cargar primero cada registro en la memoria. No hace falta decir que esto da lugar a problemas de memoria y rendimiento si se hace de forma incorrecta.
Otra limitación importante es el modelo de hilos de Core Data. El marco espera ser ejecutado en un solo hilo. Afortunadamente, Core Data ha evolucionado mucho a lo largo de los años y el framework ha puesto en marcha varias soluciones para que trabajar con Core Data en un entorno multihilo sea más seguro y fácil.
Para las aplicaciones que necesitan gestionar un complejo gráfico de objetos, Core Data es un gran ajuste. Si sólo necesita almacenar un puñado de objetos no relacionados, entonces puede estar mejor con una solución ligera o con el sistema de valores por defecto del usuario.
Explorando la pila de Core Data
Ahora que sabe lo que Core Data es y lo que no es, es el momento de profundizar en los bloques de construcción del marco. Es esencial que entiendas cómo las diversas clases que hacen que el marco de trabajo funcione conjuntamente.
Las estrellas del marco de trabajo son:
- el modelo de objetos gestionados
- el contexto de objetos gestionados
- y el coordinador del almacén persistente
Este diagrama muestra cómo estas clases se relacionan entre sí. Empecemos con el modelo de objetos gestionados.
Modelo de objetos gestionados
El modelo de objetos gestionados es una instancia de la clase NSManagedObjectModel
. Aunque una aplicación típica de Core Data tiene una instancia de la clase NSManagedObjectModel
, es posible tener varias. La instancia del modelo de objetos gestionados representa el modelo de datos de la aplicación Core Data.
El diagrama anterior muestra que el modelo de objetos gestionados está conectado al modelo de datos. El modelo de datos está representado por un archivo en el paquete de la aplicación que contiene el esquema de datos de la aplicación. El esquema de datos no es más que una colección de entidades.
Una entidad puede tener atributos y relaciones, que conforman el modelo de datos de la aplicación. Recuerde por ahora que el modelo de objetos gestionados una instancia es de la clase NSManagedObjectModel
y que es el modelo de datos de la aplicación Core Data representa.
Contexto de objetos gestionados
Un contexto de objetos gestionados está representado por una instancia de la clase NSManagedObjectContext
. Una aplicación Core Data tiene uno o más contextos de objetos gestionados, cada uno de los cuales gestiona una colección de objetos modelo, instancias de la clase NSManagedObject
.
El diagrama que hemos explorado anteriormente ilustra que el contexto de objetos gestionados recibe objetos modelo a través de un coordinador de almacén persistente. Mantiene una referencia al coordinador del almacén persistente de la aplicación.
El contexto de objetos gestionados es el objeto con el que más se interactúa. Crea, lee, actualiza y elimina objetos modelo. Desde la perspectiva de un desarrollador, la clase NSManagedObjectContext
es el caballo de batalla del marco de trabajo de Core Data.
Coordinador del almacén persistente
El coordinador del almacén persistente está representado por una instancia de la clase NSPersistentStoreCoordinator
y juega un papel clave en cada aplicación de Core Data. Aunque es posible tener varios coordinadores de almacén persistente, la mayoría de las aplicaciones sólo tienen uno. Muy, muy raramente hay una necesidad de tener múltiples coordinadores de almacén persistente en una aplicación.
El coordinador de almacén persistente mantiene una referencia al modelo de objeto gestionado y cada contexto de objeto gestionado padre mantiene una referencia al coordinador de almacén persistente. No te preocupes por los contextos de objetos gestionados padre e hijo por ahora.
El diagrama anterior nos muestra que un coordinador de almacén persistente está conectado a uno o más almacenes persistentes. Esto nos lleva al almacén persistente.
Almacén persistente
Recuerda que Core Data gestiona un gráfico de objetos. El marco sólo es útil si el coordinador del almacén persistente está conectado a uno o más almacenes persistentes. Core Data soporta tres tipos de almacenes persistentes:
- una base de datos SQLite
- un almacén binario
– un almacén en memoria
Cada tipo de almacén persistente tiene sus pros y sus contras. La mayoría de las aplicaciones utilizan una base de datos SQLite como su almacén persistente. Como he mencionado antes, SQLite es ligero y muy rápido. Es ideal para aplicaciones móviles y de escritorio.
¿Cómo funciona la pila de Core Data
Ahora que sabes en qué consiste la pila de Core Data, es hora de explorar cómo funciona en una aplicación. El corazón de una aplicación Core Data es el coordinador del almacén persistente. El coordinador del almacén persistente se instancia primero cuando se crea la pila de Core Data.
Pero para crear el coordinador del almacén persistente, necesitamos un modelo de objetos gestionados. ¿Por qué? El coordinador del almacén persistente necesita saber cómo es el esquema de datos de la aplicación.
Después de configurar el coordinador del almacén persistente y el modelo de objetos gestionados, se inicializa el caballo de batalla de la pila de datos básicos, el contexto de objetos gestionados. Recuerde que un contexto de objetos gestionados mantiene una referencia al coordinador del almacén persistente.
Con la pila de Core Data configurada, la aplicación está lista para utilizar Core Data para interactuar con el almacén persistente de la aplicación. En la mayoría de los casos, su aplicación interactúa con el coordinador del almacén persistente a través del contexto de objetos gestionados.
Rara vez, o nunca, interactuará directamente con el coordinador del almacén persistente o el modelo de objetos gestionados. Como mencioné anteriormente, la clase NSManagedObjectContext
es la clase con la que se interactúa con mayor frecuencia.
El contexto de objetos gestionados se utiliza para crear, leer, actualizar y eliminar registros. Cuando se guardan los cambios realizados en el contexto de objetos gestionados, el contexto de objetos gestionados los empuja al coordinador del almacén persistente, que envía los cambios al almacén persistente correspondiente.
Si su aplicación tiene varios almacenes persistentes, el coordinador de almacenes persistentes averigua qué almacén persistente necesita guardar los cambios del contexto de objetos gestionados.
En pocas palabras
Ahora conoce los fundamentos del marco de trabajo de Core Data. Ya estás adelantado porque la mayoría de los desarrolladores se saltan este paso. El siguiente paso que tienes que dar es empezar a utilizar el framework. Si necesitas que te echen una mano, te recomiendo que eches un vistazo a Mastering Core Data With Swift.
El manual que falta
para el desarrollo de Swift
La guía que desearía haber tenido cuando empecé
Únete a más de 20.000 desarrolladores que están aprendiendo sobre el desarrollo de Swift
Descarga tu copia gratuita
.