Pour comprendre Core data, il faut comprendre le principe fondamental de développement d'une application Cocoa. Je vais essayer d'être le moins technique que possible.
En effet ne l'oublions pas Cocoa est un environnement de développement objet qui comprend deux ensembles de classes.
- Application Kit qui contient les classes permettant en général de concevoir les interfaces utilisateurs
- Fondation kit qui regroupe les classses utilisées pour coder des actions ou décrire des données (chaine de caractères, etc).
Le concept de développement utilisant Cocoa est basé sur le principe que l'on appelle MVC comme Model, View, Controller.
En clair cela veut dire que toute application cocoa bien écrite comprend en général trois parties.
- L'interface utilisateur que l'on développe en utilisant Interface Builder et donc les classes de l'Application Kit; c'est donc la View de MVC,
- Les données que l'on utilise dans son appli et que l'on Modélise en utilisant les classes de Fondation Kit. C'est donc le Model de MVC
- et les actions qui permettent de faire le lien entre les deux et qui composent la partie Controller du concept MVC.
Pour aider les développeurs à produire rapidement des applis qui soient robustes, Apple a fourni jusqu'à Panther deux technologies.
Interface Builder pour la partie View, et la technologie des Binding pour faciliter la conception de la partie Controller.
Pour la Partie Model, les développeurs devaient coder tout eux-mêmes.
Exemple :
je développe un soft permettant de gérer des chèques d'achat. Mon interface propose à l'utilisateur de saisir son numéro d'abonné et le montant de la somme à dépenser .
Une autre interface présente à l'utilisateur, la liste des achats effectués et les modifications se font en temps réel.
Vous voyez que l'utilisation des binding dans mon controller permet automatiquement d'effectuer la mise à jour de la liste d'achats chaque fois que l'utilisateur utilise un chèque d'achat. Le développeur n'a aucun code à écrire!
Par contre pour la partie Model, j'ai modélisé les chèques d'achats (N° chèque , montant), l'utilisateur (son nom, prénom, N° d'abonné et la somme disponible de son compte) Ces données sont stockées dans des fichiers que j'appelle CHEQUE et UTILISATEUR par exemple.
En utilisant Cocoa, CHEQUE et UTILISATEUR sont des classes. Pour utilisateur par exemple, nom, prenom etc sont appelés variables d'instance de la classe. Enfin pour gérer mon objet utilisateur (incrémenter ou décrementer le montant du compte), on utilise ce qu'on appelle en jargon objet des méthodes.
Le plus dur c'est que l'on dots également gérer des undo , les redo. Mais surtout les fonctions permettant de sauvegarder ces données sur disque et pouvoir les relire. C'est ce qu'on appelle gérer la persistence des données.
Croyez-moi c'est assez pénible et il faut vraiment penser à tout.
HEUREUSEMENT Core Data est arrivé ( comme zorro).
Que fait Core Data?
Core Data introduit le moyen de gérer automatiquement la partie Model en introduisant le concept de Managed Object Model qui en fait permet au développeur de modéliser l'ensemble des objets de type données utilisées dans son application. Pour le faire, Apple fournit un outil intégré dans Xcode qu'il désigne sous le doux nom de Data Model Design Tool.
Cette modélisation introduit la notion d'Entité pour désigner les Classes ( Entité CHEQUE et Entite UTILISATEUR par exemple), la notion d'attribut pour designer les variables d'instance de classe. Et chose nouvelle, la notion de Relation entre Entités différentes.
Core data introduit aussi plusieurs autres concepts comme celui du Managed Object Context. En effet imaginez qu'un utilisateur ouvre deux interfaces de l'application pour effectuer des achats pour ses chèques et ceux de son épouse. La notion de contexte permet de faciliter la gestion séparée des deux interfaces. Ceci est très important lorsque par exemple le mari et son épouse ont un même compte. cela permet de valider complètement une transaction au niveau du contexte. La gestion des undo et redo se fait également au niveau du contexte..
Pour la gestion des validations concurentes, Core data introduit la notion de Persistence Store Cordinator. C'est lui qui coordone les accés aux données sur le support. Pour cela il se sert de la modélisation.
Pour que vous comprenier encore mieux je vais le préciser par une image.
Imaginez que les objets de l'applications (CHEQUES, UTILISATEURS) utilisés par l'application sont symbolisés par des boules vertes et rouges. Chaque boule verte est un chèque particulier avec son numéro, son montant etc... et chaque boule rouge est un utilisateur avec son nom, prenom etc.
Quand je lance mon application, celle-ci me demande de saisir mon N° d'abonné. Puis il m'affiche la liste de mes chèques. Comment cela se passe?
Le Persistent Store Cordinator lit sur disque, il se sert d'un model de chèque (Le modèle crée avec l'outil de Core data) pour créer une boule verte en lui donnant son numéro, son montant. il fait la même chose s'il lit les donnés d'une personne sauf que dans ce cas il crée une boule rouge.
L'ensemble de ses boules sont alors gérés par le Managed Object Context. Toutes les opérations que j'effectue sur ces boules sont géré par lui.
Lorsque je vailde l'ensemble de mes opérations, le Managed Object Context transmet au Persistence Store Cordinaor qui se sert du Model comme schéma pour écrire les données validées sur disque
Tous ces mouvements sont gérés par Core Data et non par le développeur.
En outre pour ecrire les données sur disque, Apple propose 3 types de format de fichier.
- Un fichier plat de format binaire
- Un fichier de format XML
- Un fichier au format base SQLite
L'utilisation d'un format ou un autre dépend du développeur .
J'espère avoir été assez claire car pour le développeur, c'est une sacré libération et surtout une façon de développer plus élégante et plus fiable.
Pour Apple c'est une phase de plus vers l'industrialisation du processus de développement. Les applications gagnent en puissance, en fiabilité.
Pour les curieux.