To Core Data or not to Code Data : )

RadadaRadada Membre
21:27 modifié dans API AppKit #1
Salut à  tous,

J'espère que vous n'allez pas me lyncher en disant "ouais sujet traité des milliards de fois, etc.", ce qui est vrai, je le reconnais. Mais plus qu'une question philisophique, c'est surtout par rapport à  mon appli que je vois ça avec une approche vachement plus pratique...

Alors voilà  : j'ai pour projet (beaucoup trop gros pour moi, mais je suis tenace :p) de créer une sorte de Journal pour Mac (genre MacJournal) mais spécialisé.
Et avant de commencer, en bon développpeur, j'essaie déjà  d'écrire des specs, puis un cahier des charges et un doc technique histoire de partir le plus propre possible.

Mais d'entrée de jeu, la façon dont je vais stocker mes données va avoir une importance capitale. En effet, un journal (ou une entrée pour prendre l'élément de base ou presque) est un fourre-tout qui contient du texte, des images, des vidéos, des liens, etc... Du coup, je me demande si CoreData est bien pour ce genre de truc ou pas? Ou alors, est-ce qu'il vaut mieux que je rédéfinisse toutes les classes dont je vais avoir beoin pour ensuite les encapsuler dans un MegaObject?
Il y aussi la solution du XML avec des Bundle où une entrée pourrait simplement correspondre à  un bundle avec des liens vers les différents élements sous forme d'un graphe XML...

Bref, les possiblités ne manquent pas, surement elles ont toutes leurs qualités et leurs défauts, mais il va bien falloir que j'attaque à  un moment ou à  un autre ; )). Les principaux points concernent au final le stockage (pour pouvoir faire de l'import/export/Drag n' drop), et surtout permettre une recherche dans le texte rapide!!!!

Merci d'avance pour vos lumières.

Réponses

  • ClicCoolClicCool Membre
    21:27 modifié #2
    Bonjour,

    Tu serais le seul (?) à  tenir ce journal ? (donc à  accéder à  la base ).

    Par ce que si tu envisages une sorte de base de données à  partager (avec d'autres auteurs ...) c'est pas la peine de réfléchir plus loin.
    CoreData est MONO-Utilisateur.
  • RadadaRadada Membre
    21:27 modifié #3
    Salut et merci pour la réponse.
    Non, le journal serait en local sur le poste du gars. Ensuite, s'il veut partager, il utilise des fonctionnalités genre drag n' drop, export, mail etc.
    Ce n'est pas un journal collaboratif en fait...
    Merci ;)
  • CéroceCéroce Membre, Modérateur
    21:27 modifié #4
    Sache qu'on ne peut pas enregistrer un document CoreData dans un bundle, à  moins d'utiliser des bidouilles immondes. Tu devras donc copier les images/vidéos dans la base de données ou seulement conserver leur URL.

    De toute façon, je dirais: commence avec Core Data, dans deux semaines, tu nous annonceras que tu abandonnes tellement c'est compliqué  ;)
    Au moins, ça t'auras permis de modéliser tes objets.
  • RadadaRadada Membre
    21:27 modifié #5
    dans 1257245491:

    De toute façon, je dirais: commence avec Core Data, dans deux semaines, tu nous annonceras que tu abandonnes tellement c'est compliqué  ;)
    Au moins, ça t'auras permis de modéliser tes objets.


    Lol merci Ceroce : )
    Du coup, toi tu partirais sur quoi : création d'objets "classiques" comme en C++ (c'est mon langage de base :D) et regroupement du tout dans un bundle pour faciliter la gestion des données par la suite?
    Ceci pose un second problème : quid de la façon de stocker les données? Binaire? Xml?
    Merci chef :p
  • CéroceCéroce Membre, Modérateur
    novembre 2009 modifié #6
    Oui, quelque chose comme ça. De toute façon, tu n'as que deux choix possibles, utiliser une BdD (CoreData ou autre) ou une gestion des fichiers classiques.

    Dans le deuxième cas, tu peux utiliser des fichiers XML, des fichiers PLIST (un autre format XML, spécifié par Apple) ou des binaires.

    Tu disposes pour chacun d'un ensemble de classes. Respectivement: NSXMLDocument, NSPropertyListSerialization et NSKeyedArchiver.

    L'effort de développement est plus important pour NSXMLDocument que pour NSPropertyListSerialization, lui même plus important que celui de NSKeyedArchiver. Mais l'interopérabilité du format de fichier est inversement proportionnelle.


    J'espère ne pas avoir écrit trop de bêtises, n'hésitez pas à  me corriger.

    Tu peux tout de même essayer de te mettre à  CoreData, qui fonctionne main dans la main avec les Bindings, au moins pour ta culture personnelle. Tu apprendras beaucoup sur Cocoa.
  • RadadaRadada Membre
    21:27 modifié #7
    dans 1257248357:

    L'effort de développement est plus important pour NSXMLDocument que pour NSPropertyListSerialization, lui même plus important que celui de NSKeyedArchiver. Mais l'interopérabilité du format de fichier est inversement proportionnelle.

    Si j'ai tout compris, le NSKeyedArchiver est facile, mais limité alors que le NSXMLDocument est plus complexe mais plus souple, c'est ça?
    Par ce que derrière, est-ce que je peux gérer ça "facilement" avec un bundle? Mettre toutes les données multimédia dans des dossiers et gérer le tout avec un fichier plist ensuite? On peut parcourir un plist comme un XML et mettre en forme ensuite? Et le texte, je l'inclus dans le plist ou dans un dossier aussi histoire d'externaliser le tout? Merci chef ;p

    dans 1257248357:

    Tu peux tout de même essayer de te mettre à  CoreData, qui fonctionne main dans la main avec les Bindings, au moins pour ta culture personnelle. Tu apprendras beaucoup sur Cocoa.

    Ben Core Data, j'ai fait avec le livre de Hillglass, et c'est vrai que ça à  l'air marrant, mais assez limité je pense dés qu'on doit gérer certaines données. Pour un CRM par contre, ça doit être de la balle du coup :) )
  • RadadaRadada Membre
    21:27 modifié #8
    Et à  ton (votre) avis : pour afficher les données, il faut utiliser quoi comme vue? Un truc gende NSWebView ou un truc avec du RTF (je pencherais pour le dernier).
    Dsl de ne pas poster le nom des objets Cocoa, mais je suis au taf avec mon PC tout pourri : ))))
    Merci.
  • CéroceCéroce Membre, Modérateur
    21:27 modifié #9
    Oui, plutôt une NSTextView.
    Les webviews ne permettent pas (en tout cas pas directement) l'édition.
  • CéroceCéroce Membre, Modérateur
    21:27 modifié #10
    dans 1257252319:

    Si j'ai tout compris, le NSKeyedArchiver est facile, mais limité alors que le NSXMLDocument est plus complexe mais plus souple, c'est ça?

    Ce n'est pas une question de souplesse, c'est une question d'interopérabilité. Un fichier XML (pourvu que son DTD soit complet) se suffit à  lui même. Il peut donc être exploité par un programmeur qui ne connaà®t pas le format de fichier.
    Son autre avantage, c'est que tous les langages possèdent aujourd'hui des ensembles de classes pour traiter les fichiers XML. C'est intéressant si tu veux faire un traitement derrière, ou générer un fichier avec un script.

    Un exemple de PLIST:
    &lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot;?&gt;<br />&lt;!DOCTYPE plist PUBLIC &quot;-//Apple//DTD PLIST 1.0//EN&quot; &quot;http://www.apple.com/DTDs/PropertyList-1.0.dtd&quot;&gt;<br />&lt;plist version=&quot;1.0&quot;&gt;<br />&lt;array&gt;<br />	&lt;dict&gt;<br />		&lt;key&gt;BottomMargin&lt;/key&gt;<br />		&lt;real&gt;14&lt;/real&gt;<br />		&lt;key&gt;Height&lt;/key&gt;<br />		&lt;real&gt;90&lt;/real&gt;<br />		&lt;key&gt;Name&lt;/key&gt;<br />		&lt;string&gt;Untitled Format&lt;/string&gt;<br />		&lt;key&gt;TopMargin&lt;/key&gt;<br />		&lt;real&gt;8&lt;/real&gt;<br />		&lt;key&gt;Width&lt;/key&gt;<br />		&lt;real&gt;70&lt;/real&gt;<br />	&lt;/dict&gt;<br />&lt;/array&gt;<br />&lt;/plist&gt;
    


    Comme tu le vois, c'est du XML, sauf que le DTD définit les clefs utilisées par Apple (key, real, string, etc.), mais pas à  quoi correspondent les valeurs des clefs (BottomMargin, Height...), qui dépendent du programme.

    Quant aux keyed archivers, je crois qu'ils génèrent des fichiers binaires, donc pas lisibles par un humain.

    dans 1257252319:

    Ben Core Data, j'ai fait avec le livre de Hillglass, et c'est vrai que ça à  l'air marrant, mais assez limité je pense dés qu'on doit gérer certaines données.

    Non, non, c'est basé sur SQLite, c'est vraiment performant et efficace. Ses seuls inconvénients sont ceux que nous avons évoqué: la complexité, et le fait que la BdD est forcément locale.
  • AliGatorAliGator Membre, Modérateur
    21:27 modifié #11
    Les NSArchivers et NSKeyedArchiver génèrent en effet un format opaque.
    En réalité cela semble être un PLIST au format binaire derrière (l'utilisation de plutil permet de convertir l'archive binaire en XML), mais le PLIST XML derrière est illisible pour le commun des mortels (y'a des IDs partout, des $machin avec des clés réservées, beaucoup de trucs abstraits pour éviter la redondance d'objets ou pour stocker la classe de chaque objet, etc... bref un vrai boxon à  décrypter à  la main, ce qui est normal ce n'est vraiment as fait pour ;))
  • CéroceCéroce Membre, Modérateur
    21:27 modifié #12
    Oui c'est bien ça Ali, les NSArchivers conservent les liens entre les objets, même s'il ne s'agit pas d'une arborescence... Au contraire, le XML, par sa structure, part du principe que les objets sont organisés sous forme d'arbre, ce qui est effectivement le cas pour beaucoup de documents, à  commencer par le DOM.

    A contrario, si l'objet A pointe sur l'objet B qui pointe sur l'objet C qui pointe sur l'objet A, NSArchiver se rend compte de la boucle de références et s'arrête à  C. Une fois désarchivé, les relations sont bien rétablies.
    D'ailleurs, c'est pareil pour CoreData, c'est pour cela en partie que son format XML est si illisible.
Connectez-vous ou Inscrivez-vous pour répondre.