Avec la sortie de OS X 10.4 (Tiger), Apple nous a donné quelque chose d'assez cool développeurs appelé «Données fondamentales». Core Data est un ORM outil de base (au moins dans son concept, s'il n'est pas dans le code actuel) sur les Enterprise Objects Framework (Ou EOF) qui a été l'outil révolutionnaire de prochaine pour la persistance de données orienté objet d'une base de données: révolutionnaire, c'est, en 1993.
Maintenant, je ne veux pas de données légère EOF ou Core dans cette déclaration. Les deux sont des outils cool, et sont largement supérieurs à l'incorporation des appels SQL à une API procédurale dans votre code orienté objet. En 1993, les langues et fortement typé, a jugé le développement de bureau se percher et de "développement web" était même pas encore vraiment exister comme une forme définie de la programmation, car, à toutes fins pratiques, 1993 fut l'année du web est né1.
C et C + + ont été les champions incontesté du développement d'applications de bureau et l'arrivée de Java deux ans plus tard serait le ciment de la domination des langues fortement typé pour un certain temps. En 1993, les langues faiblement typé avait été autour pendant un moment, mais pour un certain nombre de raisons, ont été largement considérées comme mal adaptées à l'écriture de «sérieux» des applications. L'utilisation de NeXTStep Objective-C a été définitivement un homme bizarre en termes de développement d'applications de bureau.
Les choses ont bien changé depuis 1993, cependant. Les ordinateurs ont obtenu plus rapidement, les langages dynamiques tels que Perl, Ruby et Python sont devenus de plus en plus populaire, et même la plupart des langages à typage statique - y compris C + + - ont acquis un certain niveau de capacité d'introspection, de l'exécution.
Probablement l'un des plus cool approches de mapping objet-relationnel est le Design pattern ActiveRecord. Une bonne mise en œuvre nécessite ActiveRecord un langage dynamique à l'introspection de type robuste qui permet à l'objet pour ajouter dynamiquement des variables et des méthodes pour lui-même basé sur le contenu d'une table base de données.
Mais ActiveRecord, aussi cool qu'elle soit, n'est pas idéale pour le développement de bureau avec une base de données intégrée, car il est la base de données par des tables. Quel serait l'idéal pour le travail incorporé est une sorte de "reverse ActiveRecord" où les tables sont créées sur la base des attributs d'objets existants. Donc, si vous avez ajouté une variable de chaîne à votre objet, il saura ajouter une colonne varchar de la table et serait également savoir pour sauvegarder le contenu de la variable dans cette colonne. S'il ya un nom pour cette approche, s'il vous plaît laissez-moi savoir, je n'ai jamais entendu un, mais je soupçonne que celle-ci existe.
Quoi qu'il en soit, j'ai un point ici, et qu'il a à faire avec l'iPhone et SQLite. J'ai réalisé hier lors de l'écriture une proposition d'article sur SQLite que la nature dynamique de l'Objective-C permettrait à cette théorie "reverse ActiveRecord" l'idée d'être mis en œuvre et, en fait, qu'il pourrait probablement être presque entièrement encapsulé dans une classe unique super-abstrait. Eh bien, techniquement pas abstrait, car l'Objective-C ne supporte pas les classes abstraites, mais ce n'est ni ici ni là.
Hier, j'ai écrit une version proof-of-concept de juste une telle classe. Il a des méthodes pour créer des tableaux, insérer, mettre à jour et supprimer des données de la base de données ainsi que de restauration pour les dernières valeurs stockées dans la base de données. Il est capable d'utiliser des relations de clés étrangères pour les tête-à-une associations entre les objets et tables de références croisées pour les associations un-vers-plusieurs représenté en Objective-C par l'utilisation de tableaux et dictionnaires.
Mon code est encore très rugueuse sur les bords et n'est certainement pas prêt pour la production, mais je pense que le concept est bon et avec Core Data ne pas être disponible sur l'iPhone, je pense que c'est une excellente approche pour éviter d'avoir à écrire des tonnes de coutume SQL embarqué pour chaque objet. En fait, il vous suffit de créer une sous-classe, ajouter des variables d'instance et les déclarations de propriété et vous avez terminé. Vous n'avez pas réellement besoin d'écrire du SQL pour manipuler la persistance et il ya même un mécanisme de préciser les indices de la table de votre objet.
Je vais nettoyer mon code un peu et le mettre là-bas pour les commentaires et la rétroaction dans les jours à venir.
1 - Oui, je sais que, en théorie, le Web remonte à 1989 et la mise en œuvre remonte à 1990, mais le CERN a annoncé le 30 avril 1993 que le World Wide Web serait libre pour tout le monde à utiliser, et cette date (en mon esprit) marque le véritable début de l'Internet tel que nous le connaissons.
Aucun commentaire:
Enregistrer un commentaire