7
votes

Wrapper FMDB VS Données de base: qui est plus facile à utiliser et à entretenir?

Wrapper FMDB VS Données de base: qui est plus facile à utiliser et à entretenir?

Je suis confus car la FMDB est très ancienne mais toujours de nombreux développeurs l'utilisent, tandis que les données de base sont nouvelles et sont uniquement prises en charge par 3,0 et ultérieures SDK.

Certains ont déclaré que la FMDB est facile à utiliser et certaines données de base. Aidez-moi s'il vous plaît afin que je puisse aller dans la bonne direction.

Merci d'avance


1 commentaires

En ce qui concerne votre commentaire "uniquement pris en charge par 3.0 et ultérieure SDK", Apple n'accepte plus les applications pour l'App Store qui ciblent une version OS antérieure à 3,0, il s'agit donc d'un non-problème.


3 Réponses :


0
votes

sauf si vous avez des exigences spécifiques du projet, j'utiliserais des données de base. Apple l'améliore constamment et l'a optimisé pour l'iPhone.


1 commentaires

Merci de réponse, je pense aussi qu'il est bon d'utiliser des données de base.



19
votes

J'ai utilisé à la fois lourd de nombreux projets maintenant.

FMDB est très simple, si vous connaissez SQL, il peut même être assez facile à utiliser. Mais ce que vous devez faire à travers le cycle de vie d'une application lorsque le modèle de données change est:

  1. Modifiez le modèle de données, généralement avec quelque chose comme base
  2. Modifiez le code SQL pour refléter les modifications du modèle
  3. Modifiez des objets de données pour refléter les modifications du modèle
  4. ajoutez du code dans l'application pour gérer le cas où vous rencontrez l'ancien base de données.

    quelles données de base apporte au cycle de vie, c'est:

    1. Modèle de données et objets sont modifiés avec la même action (je suis En supposant que vous générez des objets de données avec quelque chose comme Mogenerator ).
    2. Visualisation plus facile du modèle de données.
    3. encourage plus facile à parcourir des modèles de données en vous faisant penser à relations inverse.
    4. Souvent, la migration automatique est suffisante pour transmettre à travers un modèle simple changements sans avoir à reconstruire la DB de zéro.
    5. Les données de base proposent une intégration iCloud via NsManageDDocument.

      L'enfer que les données de base vous permettent de:

      1. La suppression est nulle, car tout accès de propriétés dans un objet supprimé jette une exception de programme.
      2. L'accès des données de fil d'arrière-plan craint, car les données de base le font complexe de fonctionner correctement avec plusieurs threads - vous ne pouvez pas pour Exemple Utilisez un objet de données que vous avez obtenu à partir d'un contexte dans un thread dans un autre fil différent. Tellement pour simplement passer des objets à Fils de fond pour le travail avec ...
      3. Il y a tellement de tournage magique autour de vos données que lorsque les choses vont faux, il sera terriblement frustrant d'essayer de comprendre quoi faire.
      4. Les données de base semblent terriblement fragiles, des objets tels que les objets supprimés qui lancent des exceptions, en utilisant à partir des exceptions de lancement de fils incorrects, des validations qui lancent des exceptions, ou du modèle entier disparaissant après ce qui semblait être un simple changement.

        Alors, que demanderais-je? Pour paraphraser l'ancienne citation sur la démocratie, les données de base sont le pire système de persistance des données - à l'exception de tous les autres. Même avec la nouvelle définition de la douleur et de la souffrance que les données de base apporteront à votre vie, il reste moins de travail et plus facile à travailler avec la FMDB ou d'autres couches de persistance de données.

        FMDB est plus simple et si vous acceptez de mettre beaucoup plus de temps dans les modifications et la définition de modèle de données qui peut être correcte. Mais généralement, je recommanderais aux gens de mordre la balle et d'utiliser des données de base à moins de ne pas avoir une raison limite.

        Quelques conseils rapides:

        • Ne supprimez jamais rien dans les données de base pendant que l'interface utilisateur est en hausse et éventuellement Accéder aux objets.
        • Si possible traitez la base de données comme jetable et que vous puissiez reconstruire contenu, de sorte que si l'automigration ne fonctionne pas, l'utilisateur peut toujours Exécutez l'application.
        • Gardez toutes les activités de données de base sur le thread principal et ne placez que dans la Contexte en dernier recours.
        • Ne pouvez en aucun cas utiliser des validations de données de base ou décochez toujours le champ "Facultatif" Foray de la boîte de votre enfance dans vos entités. Lequel préféreriez-vous avoir une mauvaise valeur glisser dans votre modèle qui pourrait finir par l'affichage drôle ou l'application simplement se bloquer?
        • Utilisez Mogenerator pour générer des objets de données de votre modèle. Il diffuse des objets directement liés au modèle que la nouvelle génération peut changer et une couche d'objets en quelque sorte «ci-dessus» qui démarrait en blanc mais dans lequel vous pouvez ajouter une logique personnalisée autour des objets de données et ne sera pas modifié. lorsque les objets inférieurs sont régénérés.

4 commentaires

Je ne dis pas que le support multithread de Coredata est totalement cible. Vous devez juste suivre les règles écrites, voir par ex. Stackoverflow.com/Questtions/2138252


Super réponse, je suis le nouvel utilisateur de ce site, c'est pourquoi je ne suis pas accepté ce genre de réponse, vous expliquez tout simplement tout en détail très aide pleinement. Merci beaucoup


@Yuji: Même lorsque vous suivez les règles écrites, vous pouvez parfois obtenir des erreurs étranges de revenir dans le contexte principal - surtout lorsque vous avez plus d'un fil de fond ajoutant ou modifiant les mêmes entités ... sans parler de ce qui se passe lorsque vous commencez Obtenir des notifications de fusion des antécédents qui se bloque, car une bibliothèque tierce partie utilise également des données de base. Je ne dis pas exactement que ça craint, ils ont conçu pour une utilisation multithreadée - mais comme je l'ai dit dans mon autre point, c'est juste une chose très fragile sujette à une erreur.


BTW, en tant que note latérale, la stratégie de conflit de défaillance par défaut dans les données de base est une autre exception.



0
votes

wrapper FMDB est plus facile à configurer (vous pouvez simplement ajouter des données dans votre DB SQLite via Firefox Plugin SQLITEMANAGER ou utilisez un autre gestionnaire SQLite pour remplir votre base de données), plus facile à déboguer (vous pouvez réellement voir en temps réel ce qui change Votre base de données), plus facile à comprendre, plus facile à apprendre, plus facile à porter (à Web ou Android). Les données de base sont un kargeur de karge géant non intuitif, mal conçu, mal conçu et mal mis en œuvre.


1 commentaires

Veuillez ajouter un exemple de Comment pour configurer FMDB à votre réponse. Cela ressemble plus à un commentaire maintenant.