Sondage 13 - Core Data

septembre 2008 modifié dans Coin canapé & détente #1
Le sondage n'a pas pour objectif de nier l'utilité de la notion de modèle mais plutôt de saisir vos impressions sur l'approche choisie d'Apple.

1°) Globalement, pensez-vous que ce mécanisme répond au raison de son existence ?

1.1) pas du tout.
1.2) un peu.
1.3) moyennement.
1.4) pleinement.

2°) Pensez-vous que ce mécanisme est complexe à  comprendre (niveau fonctionnel exclusivement) ?

2.1°) pas du tout.
2.2°) un peu.
2.3°) moyennement.
2.4°) pleinement.

3°) Pensez-vous que ce mécanisme est complexe à  mettre en oe“uvre (niveau organique) ?

3.1°) pas du tout.
3.2°) un peu.
3.3°) moyennement.
3.4°) pleinement.

4°) Si vous éprouvez une quelconque difficulté, seriez-vous intéressé par un autre système ?

4.1°) pas du tout.
4.2°) un peu.
4.3°) moyennement.
4.4°) pleinement.

Merci de votre participation.

Réponses

  • CéroceCéroce Membre, Modérateur
    12:22 modifié #2
    1) Pleinement. D'ailleurs, je n'étais pas sans penser il y a quelques semaines que Core Data en faisait même trop par rapport aux besoins actuels; en fait, il est déjà  prêt pour ceux de demain.

    2) Un peu. Mais en fait, le nombre d'objets mis en oe“uvre n'est pas énorme, et il n'est pas forcément nécessaire de savoir comment cela se passe sous le capot pour faire marcher le bouzin.

    3) Pleinement. Et là , c'est surtout la faute de la documentation, totalement incapable d'expliquer quoi que ce soit simplement.

    4) Sincèrement, un peu, mais pas plus que ça. L'investissement en temps pour comprendre le fonctionnement fut énorme, mais il est derrière moi ! Si je n'avais pas fait cet investissement, ce serait différent, mais aujourd'hui, il me faudrait une bonne raison pour utiliser un autre système, par  exemple qu'il puisse facilement prendre des formats de fichiers classiques, ou facilement gérer les documents sous forme de bundles.
  • 12:22 modifié #3
    Merci Céroce pour tes réponses commentées.
  • schlumschlum Membre
    12:22 modifié #4
    J'ai essayé une fois... ben ça m'a toujours rebuté.
    Je préfère gérer moi même mon format d'archivage.
  • Paisible.frPaisible.fr Membre
    12:22 modifié #5
    dans 1220901215:

    J'ai essayé une fois... ben ça m'a toujours rebuté.
    Je préfère gérer moi même mon format d'archivage.

    Si tu peux argumenter Schlum, je te lirais avec plaisir.
    Qu'est-ce qui à  fait que cela te rebute ?
  • schlumschlum Membre
    12:22 modifié #6
    C'est fort complexe pour ce que ça fait, c'est tout  ;)
    Et la doc a l'air moisie en plus...
  • schlumschlum Membre
    septembre 2008 modifié #7
    Si tu veux que je précise ; quand j'en arrive à  un certain niveau de complexité, je préfère bidouiller moi même avec l'API SQLite, quitte à  me faire un p'tit wrapper  ;)
    Au moins je sais exactement ce qui tourne sous le capot !
  • 12:22 modifié #8
    Merci Schulm pour ta réponse.

    @Gnome06
    Tu peux aussi répondre ! :P
  • Paisible.frPaisible.fr Membre
    12:22 modifié #9
    dans 1220943686:

    Merci Schulm pour ta réponse.

    @Gnome06
    Tu peux aussi répondre ! :P

    Je répondrais qu'en tant que grand débutant je n'ai pas encore (asser) mis le nez dedans pour pouvoir donner un avis un tant soit peu circonstancié et justifié.

    D'où ma demande de détails pour avoir une vision/idée de la chose et un point de vue extérieur.
  • 12:22 modifié #10
    Merci Gnome06.
  • MalaMala Membre, Modérateur
    12:22 modifié #11
    Même avis que Schlum. A la limite, une implémentation Cocoa de SQLite (ou de tout autre format de bdd) m'aurais semblé plus judicieux pour faciliter l'accès à  un plus grand nombre.

    Je trouve ça très lourd pour ce que ça fait. Je n'accroche pas du tout. Tout comme avec les binding qui y sont très liés d'ailleurs. Pourquoi? Tout simplement parce que le codage est "transféré" à  la charge d'IB. Je préfère 100 fois lire un code clair plutôt que de devoir passer mon temps à  me perdre dans les onglets d'IB.

    Cela se vérifie d'ailleurs à  l'usage. Il suffit de faire un bout de code avec Core Data/binding et d'essayer de le reprendre six mois plus tard...

    En fait, ce que j'aurais bien aimé c'est plutôt qu'Apple intègre l'approche de rtlabs:
    http://www.rtlabs.com/fwork/
    Puissant, simple, efficace.


  • orfaitorfait Membre
    12:22 modifié #12
    Je n'ai rien à  ajouter, je suis aussi du même avis de Schlum.
  • ChachaChacha Membre
    12:22 modifié #13
    dans 1221067078:

    Je n'ai rien à  ajouter, je suis aussi du même avis de Schlum.

    Quand à  moi, je ne suis pas du tout de cet avis !
    1°) Globalement, pensez-vous que ce mécanisme répond au raison de son existence ?
       1.4) pleinement.
    Core Data n'est pas adapté à  tout; mais si on l'utilise pour ce à  quoi il sert, c'est formidable.

    2°) Pensez-vous que ce mécanisme est complexe à  comprendre (niveau fonctionnel exclusivement) ?
       2.3°) moyennement.
    On peut faire simplement des trucs simples... mais pour des traitements complexes, il faut se pencher sur la doc très sérieusement.

    3°) Pensez-vous que ce mécanisme est complexe à  mettre en oe“uvre (niveau organique) ?
       3.3°) moyennement.
    ça dépend de ce qu'on fait (cf. ce qui précède)

    4°) Si vous éprouvez une quelconque difficulté, seriez-vous intéressé par un autre système ?
       4.2°) un peu.
    Pas à  pas, j'étends ma connaissance de CoreData, et je peux l'utiliser pour différents types de projets. JE n'ai pas forcément envie de passer encore du temps sur autre chose. Mais faut voir : si un autre système répond à  un besoin différent, ça peut être intéressant.

    Bref, je ne suis pas de l'avis de Schlum et Mala.
    Utiliser CoreData comme avec les tutoriaux Apple, c'est-à -dire avec des Bindings dans tous les sens et rien que du code magique, et bien c'est vrai que je n'aime pas. Par contre, je vous renvoie à  un sujet que j'avais entamé ici : http://www.objective-cocoa.org/forum/index.php?topic=2016.msg19613#msg19613

    +
    Chacha
  • MalaMala Membre, Modérateur
    septembre 2008 modifié #14
    dans 1163805668:

    Voilà , tout ça pour dire que CoreData c'est vachement bien même sans aller chercher des modèles hyper-compliqués.

    Je me permet de te citer dans ton autre post.

    Pour moi c'est justement là  que ça coince avec Core Data. La complexité de son utilisation augmente de manière exponentielle avec les besoins. Perso, voici le genre de data model que j'ai recréé sous Core Data pour un petit soft de gestion...
    gestion.jpg
    10 tables, cela n'a rien d'extraordinaire. Et bien bonjour la galère pour gérer tout ce petit monde, là  où de simples requêtes SQL font merveille.

    On notera au passage l'obligation de passer par une table "Compteur" pour gérer des références uniques associées aux différentes tables. C'est une aberration à  mon sens lorsqu'on parle de bdd relationnelles pourtant Core Data ne le gère pas.

    Un beau petit framework SQL, connecté à  des vues prévues à  cet effet, aurait fait merveille quelque soit le niveau de complexité alors que Core Data s'englue très rapidement. C'est pour ça que je faisais référence à  rtlabs. La démo parle d'elle même...
    http://www.rtlabs.com/fwork/MacSQLFrameworkDemo.mov

    Maintenant, il y a aussi des choses très pratiques avec Core Data comme par exemple la possibilité de drag and drop d'une table sur une vue pour créer une fiche ou un tableau automatiquement.

    Edit: en terme d'apprentissage, comprendre le fonctionnement des requêtes SQL ça prend quoi? Un demie heure? Et ça ouvre de nombreuse portes.

  • ChachaChacha Membre
    12:22 modifié #15
    dans 1221074880:

    On notera au passage l'obligation de passer par une table "Compteur" pour gérer des références uniques associées aux différentes tables. C'est une aberration à  mon sens lorsqu'on parle de bdd relationnelles pourtant Core Data ne le gère pas.


    Je n'ai pas très bien compris ton problème (qui m'intéresse en parallèle à  cette discussion), mais je ne doute pas que tu as raison.
    Par contre, je considère justement que CoreData n'est pas fait pour gérer sérieusement une BDD relationnelle. Pour moi, il réalise le minimum de ce point de vue, mais propose en revanche :
    -un seul objet (le managed oject) peut me servir dans le code et pour la sauvegarde; je modifie ses propriétés, et je sais que tout est synchronisé/sauvegardé; il n'y a pas une "barrière de code" (lourdeur d'un wrapper) à  franchir pour sauvegarder des données en mémoire;
    -l'occupation mémoire et la performance des caches de Core Data sont assez souples pour éviter les surconsommations, tout en proposant des requêtes très rapides.

    Il est vrai que je n'ai jamais eu besoin de gérer une BDD compliquée. Mais sachant que les clefs étrangères ne sont pas parties d'SQLite, je savais déjà  que je n'utiliserais pas Core Data pour ça.

    +
    Chacha
  • MalaMala Membre, Modérateur
    12:22 modifié #16
    dans 1221079485:

    Il est vrai que je n'ai jamais eu besoin de gérer une BDD compliquée. Mais sachant que les clefs étrangères ne sont pas parties d'SQLite, je savais déjà  que je n'utiliserais pas Core Data pour ça.


    On aborde là  une partie intéressante de Core Data. Son but est justement au départ de faire abstraction de la couche bdd pure et dure. On fait du SQLite pour les perfs mais on peut aussi choisir de plutôt basculer en xml (utile pour le debug). S'il n'y a pas a proprement parlé de clefs étrangères avec SQLite, ce n'est pas le cas de Core Data. Si tu regardes mon exemple, j'ai bien des relations entre la plupart de mes tables. Core Data s'occupe de rendre cette limitation transparente. En cela c'est très puissant.

    Dans mon exemple, chaque facture à  une clef vers le client qui lui est associé. Et Core Data permet même le liens inverse (relation multiple ici puisqu'un client peu avoir plusieurs factures). C'est donc sur le principe une véritable couche relationnelle. L'orientation naturelle aurait d'ailleurs été le support de nouveaux formats de bdd ainsi que la gestion de bdd multi-utilisateurs. Pourtant Apple semble avoir laissé les friches en l'état.

    Là  où ça cloche c'est que, si l'on parle de clefs, il faut bien une référence unique. Si Core Data gère bien une référence interne unique pour chaque ligne des tables (c'est facile à  confirmer si on est en xml), on y a cependant pas accès au niveau API. Et là  on revient à  ma table Compteur. A chaque nouveau client, je devais incrémenter ref_client pour générer une nouvelle référence. C'est du moins à  l'époque (en 2005) la seule solution qui était proposée pour contourner ce manque.

    De mémoire, il y a aussi d'autres problèmes assez frustrant dès qu'on veut travailler sur une ligne de données (ex: calculer le prix TTC à  partir du prix HT et de la TVA). Il fallait alors créer des champs "Transiant" et ensuite surcharger la classe gérant l'enregistrement pour venir faire sa cuisine soit même. Idem pour intégrer des imagettes dans un tableau (factures payées->icône vert sinon icône rouge). Au final, on se retrouve avec autant de classes qui servent à  bricoler trois lignes de code.

    Donc pour revenir à  la question initiale, moi ce serait plutôt

    1°) Globalement, pensez-vous que ce mécanisme répond au raison de son existence ?
      1.1) pas du tout.
    Il était sensé - dixit Apple - simplifier la vie et fournir une couche d'abstraction vers d'autre format de bdd. Au final, on s'aperçoit vite, dès qu'on fait un projet un peu complexe, que c'est loin de simplifier la vie et il n'a jamais évolué concernant le second point.

    2°) Pensez-vous que ce mécanisme est complexe à  comprendre (niveau fonctionnel exclusivement) ?
      2.4°) pleinement.
    Cela demande un investissement beaucoup trop lourd mais la c'est aussi lié au binding.

    3°) Pensez-vous que ce mécanisme est complexe à  mettre en oe“uvre (niveau organique) ?
      3.3°) moyennement.
    Disons que le problème c'est surtout que ça se complique très vite.

    4°) Si vous éprouvez une quelconque difficulté, seriez-vous intéressé par un autre système ?
      4.4°) pleinement.
    Plus y en a mieux c'est.

    Voilà , cela n'engage que moi mais c'est mon sentiment après avoir pratiqué un petit moment.
  • 12:22 modifié #17
    Un grand merci à  Chacha & Mala pour le détail et la qualité de vos remarques.
    Merci également à  olof.
  • ChachaChacha Membre
    12:22 modifié #18
    dans 1221083865:

    Là  où ça cloche c'est que, si l'on parle de clefs, il faut bien une référence unique. Si Core Data gère bien une référence interne unique pour chaque ligne des tables (c'est facile à  confirmer si on est en xml), on y a cependant pas accès au niveau API.

    Il y a le objectID des managed objects. Mais je n'ai pas compris comment on gérait le fait que cet id est temporaire avant la première sauvegarde.
  • Paisible.frPaisible.fr Membre
    12:22 modifié #19
    Je ne sais pas si je vais apporte de l'eau au moulin et être très utile, mais personnellement je m'étais penché un temps sur le framework QuickLite.

    Ceci dis, je n'ai jamais réussi à  l'utiliser. Je suis même pas arrivé à  compiler les exemples livrés sous xCode 3.1. Apparement ils ont été fait sous xCode 3.0 ou 2

    Je pense que mon échec est dû à  mon manque de compétences et que certaines personnes ici auront le niveaux nécessaire pour l'utiliser si ça les intéressent.
  • olofolof Membre
    12:22 modifié #20
    dans 1221112847:

    Merci également à  olof.

    Mais de rien, même si je n'ai absolument rien dit  :P
  • 12:22 modifié #21
    Oui, bien sûr, je pensais à  Orfait en fait  ::)
  • MalaMala Membre, Modérateur
    12:22 modifié #22
    dans 1221112847:

    Un grand merci à  Chacha & Mala pour le détail et la qualité de vos remarques.
    Merci également à  olof.

    Si ça aide à  faire avancer le schmilblick alors!  :p   :P

    dans 1221113191:

    Il y a le objectID des managed objects. Mais je n'ai pas compris comment on gérait le fait que cet id est temporaire avant la première sauvegarde.

    Effectivement c'est bien à  objectID que je faisais référence (j'avais zappé le nom). Le problème c'est qu'on y a de toute façon pas accès au niveau du datamodel. Une piste a étudier serait peut-être de créer un attribut transient qui retourne sa valeur.

    En fait ce qui serait bien, c'est tout simplement de pouvoir faire passer objectID  en "public" et boum on aurait notre clef unique accessible au niveau du datamodel si on en a besoin pour certaines tables (clique droit sur une table->Afficher ObjectId). Dans le cas contraire, il reste caché. Cela ne compliquerait pas les cas simples et ça apporterait une solution élégante pour les cas plus complexes.


  • 12:22 modifié #23
    dans 1220902384:

    C'est fort complexe pour ce que ça fait, c'est tout  ;)
    Et la doc a l'air moisie en plus...

    Je plussoie aussi. Je m'y suis jamais vraiment fait à  CoreData...
  • FloFlo Membre
    12:22 modifié #24
    J'ajouterais que core Data complexifie grandement l'utilisation de certaines classes comme le couple NSOutlineView et NSTreeController.

    Construire une arborescence basée sur des entités core Data relève du casse-tête chinois, les instances sont stockées à  l'aide de NSSet et sont donc chargés dans n'importe quel ordre. Je rejoint donc certain post précédent en disant qu'il faut en de nombreux cas "bricoler" pour obtenir ce que l'on veut...

    Il s'agit pourtant à  mon sens d'un framework partant de bonnes idées : gestion undo/redo, stockage,  compatibilité avec les bindings etc...

    En conclusion, prometteur mais aisément perfectible.
  • 12:22 modifié #25
    Merci à  Eaglelouk & Flo

    @Eaglelouk
    D'ou vient ce verbe (plussoie) ? ??? Moi pas comprendre !  :P

  • AliGatorAliGator Membre, Modérateur
    septembre 2008 modifié #26
    dans 1221210863:
    D'ou vient ce verbe (plussoie) ? ??? Moi pas comprendre !  :P
    La minute de culture générale du vendredi soir :

    Cette expression vient de l'habitude, sur certains forums/blogs/chatrooms/..., d'écrire juste "+1" en commentaire/réponse à  une proposition/un post pour dire "je vote pour", "moi je suis d'accord avec ce qui vient d'être dit", autrement dit "un de plus qui partage cet avis" (un peu comme quand il y a plusieurs propositions, ou dans un débat quand il y a plusieurs "camps", tu réponds ça pour dire qu'il faut compter une personne de plus dans ce "camp" là , toi en l'occurrence)

    Donc EagleLouk aurais pu indiquer "+1" suite à  sa citation de la réponse de schlum, pour dire "je me rajoute à  la liste des personnes qui partagent cet avis". Mais au fur et à  mesure de l'usage, le verbe "plussoir" et surtout le terme "je plussoie" est apparu, ayant du coup un sens similaire voire identique : "je suis tout à  fait d'accord avec ce qui vient d'être dit/cité"
  • septembre 2008 modifié #27
    Merci à  AliGator pour cette précision.
    Ce qui me gène c'est qu'il semble que ce nouveau verbe soit du troisième groupe !
    De manière générale, les nouveaux verbes sont du premier puisqu'ils sont plus simples à  conjuguer. En conclusion, si l'on veut que notre langue ne devienne pas un dialecte, faisons un geste pour la protéger ! :P

    On dirais que je m'égare !
  • orfaitorfait Membre
    12:22 modifié #28
    Et en toute rigueur, il faudrait choisir le bon couple :
    - "Je plussoie" pour le verbe "plussoyer"
    - "Je plussois" pour le verbe "plussoir"

    :)
  • Philippe49Philippe49 Membre
    12:22 modifié #29
    commentaire++

    Ok, mais sur un forum C, il serait plus logique "je plus-plussoie"  ;D

    Bon, je -->
Connectez-vous ou Inscrivez-vous pour répondre.