samedi 6 mars 2010

La Magie Cocoa !

Ce soir je vais parler de Cocoa ! Mon langage de programmation préféré !
Actuellement en plein développement du logiciel XML Print Model Creator (logiciel de dessin vectoriel pour la mise en page automatisé), je découvre de plus en plus de subtilité dans ce merveilleux langage.

La semaine dernière, je me suis retrouvé devant un problème grandissant : la synchronisation des vues lors des changements des données. J'ai trouvé la réponse (merci Céroce membre de PommeDev.com) en appliquant le paradigme MVC (Model Vue Contrôleur) et en mettant en place une technologie nommée "Bindings" en anglais. Je ne sais pas comment traduire, mais je dirait "liaison magique" !

Imaginez que vous ayez d'un côté un tableau avec deux colonnes et 1000 lignes et de l'autre un élément graphique permettant d'afficher les données d'un tableau situé en mémoire.
Au lieu de dire au tableau graphique d'aller chercher les données à tel endroit en mémoire (et être obliger de lui dire de recharger les données à chaque modification), vous allez ajouter un "Contrôleur de Tableau".
Ce dernier gèrera la sélection (même multiple), l'ajout, suppression des données du tableau situé en mémoire et vous aller "binder" votre tableau graphique (colonne par colonne) sur le contrôleur de tableau.
Si vous sélectionnez une ligne dans le tableau graphique, le contôleur sera au courant et si vous ajouter une ligne dans le tableau via le contrôleur, le tableau graphique sera automatiquement actualisé !
Cela sans une ligne de code pour connecter le contrôleur de tableau au tableau graphique ! Par contre, un peu de code sera nécessaire pour créer le tableau en mémoire et le rendre disponible au contrôleur. Mais pas une ligne de code pour connecter le contrôleur au tableau en mémoire ! Et lors de l'exécution tout est là et toujours à jour !

Grâce à ces Bindings et d'autre paradigme tel que le KVC (Key-Value Coding) et KVO (Key-Value Observing), il m'a été possible de réécrire quasiment tout le logiciel sans le problème de synchronisation. Ajoutant la possibilité d'annuler les actions effectuées ainsi que d'autre fonctionnalités.