4.8 CoreData : le modèle, les principes

Qu’est ce que CoreData ?

Tout simplement un ORM from Apple(tm) disponible depuis bien longtemps dans XCode pour réaliser des applications MacOSX et iOS.
Il s’agit aussi d’une solution NO-SQL pour développer des applications iOS.

ORM = Object relational mapping.

Il s’agit en fait d’abstraire le développeur de la gestion des fichiers ou de la base de données : ce dernier manipule des objets dans un modèle mémoire, ces derniers étant à la demande sauvegardés dans la base.

Il s’agit sans doute de la méthode la plus performante pour gérer les fichiers d’une application iOS. Combiner CoreData avec une base SQLLite vous donne la possibilité d’utiliser les requêtes.
La classe NSPredicate, vous permettra très facilement de lancer des requêtes très puissantes dans votre base de donnée. Les jointures et autres réjouissances en SQL vous les taperez dans XCode en rigolant !

iOS et XCode permettent d’utiliser ce modèle pour gérer les fichiers locaux d’une application ou les fichiers dans iCloud. De plus CoreData offre des facilités pour accéder à iCloud.
Il est bien pratique dans une application iOS de ne gérer que des objets, des instances, sans se préoccuper de la sauvegarde.

CoreData permet de sauvegarder ses données sous différents formats notamment :
SQLLite
– Modèle mémoire
– Format binaire

Avec CoreData les classes sont appelés Entity et représente les objets qui seront gérés avec Cocoa.
Exemple : Souhaitant gérer des photos, vous utiliserez dans votre application un type Photo contenant des attributs, vous pourrez ainsi créer des instances et sauvagarder celle-ci dans la base de données via l’ORM CoreData.

Le datamodel (modèle de données)

La première étape pour commencer sera de créer un datamodel : On parle de réalisation d’un modèle de données. Il s’agit d’un fichier descriptif dans notre projet XCode, décrivant les différents types. Avec XCode nous disposons d’un outil graphique permettant de modéliser les types de données.

Data model

Ci-dessus un modèle de données crée avec XCode mettant en évidence 2 entités :
Photos
Vin
Le type Vin possède des attributs : annee et nom : des chaînes de caractères.
Le type Photos possède des attributs : date et image : Une date (NSDate) et une image (NSData).

Si vous observez avec attention le schéma ci-dessus vous découvrirez les relationships qui représentent les liens entre les types, à terme entre les objets :
Un objet du type Vin pointera un ensemble de Photos (cardinalité n = double flèche), un objet du type Photos pointera un Vin (cardinalité = 1). Une des caractéristiques notable des ORM est d’offrir la possiblité de créer des liens, des relations entre les types permettant ainsi de relier les objets entre eux. Dans une base de donnée relationnelle on parlera de relations entre les tables.

La création des classes issues du modèle

Une fois votre modèle de données crée, un générateur de code vous permettra dans XCode de générer les classes correspondantes aux entités. La classe NSManagedObject permet au sein de Cocoa de représenter une entité.

generation de code

Ci-dessus, voici grâce à XCode, la fonction permettant la  création des classes du type NSManagedObject : Dans notre exemple une classe Vin sera créee ainsi qu’une classe Photos.

Une fois ces classes créées, nous serons à même de gérer nos types directement. Nous verrons dans le chapitre suivant la création du modèle de données avec l’outil graphique intégré avec XCode.

Le modèle de programmation , les APIs

Apple(tm) propose des classes pour gérer les entités, gérer le CRUD (create, read, update, delete) : C’est à dire pour :
– Créer des entités dans le modèle mémoire (create)
– Lire des attributs (read)
– Mettre à jour les attributs (update)
– Détruire des entités de la base (delete).
La possibilité de détruire des entités est sans doute un peu facile donc peut s’avérer dangereuse.

Les classes importantes :
1. NSManagedObjectContext
Cette classe permet de créer des entités, les détruire, lancer des requêtes, etc.
2. NSManagedObject
Toutes les entités sont issues de ce type
3. NSFetchRequest
Permet de créer des requêtes dans la base (cf: select)
4. NSPredicate
Cette classe est particulièrement importante. Elle permet de filter les requêtes plus finement. Exemple : Je veux faire une requête dans mes vins où l’année est égale à 1995 et dont les photos sont datées après le 20/02/2013.

Je vous donne rendez-vous pour les articles suivants.

Si cet article vous a plu je vous invite à utiliser les boutons ci-dessous pour partager le contenu.

Catégories
0 Comments
0 Pings & Trackbacks

Laisser un commentaire