Pourquoi tant de programmeurs détestent absolument couches de prévalence de l'objet?

softwareengineering.stackexchange https://softwareengineering.stackexchange.com/questions/6526

  •  16-10-2019
  •  | 
  •  

Question

La prévalence est une technique simple pour fournir des propriétés ACID à un modèle d'objet en mémoire sur la base de sérialisation binaire et l'enregistrement à écriture anticipée. Il fonctionne comme ceci:

  • Démarrer avec un instantané. Sérialiser le modèle d'objet et d'écrire dans un fichier.
  • Créez un fichier journal. Pour chaque appel dans le modèle d'objet, sérialiser l'appel et ses arguments.
  • Lorsque le journal est trop grand, vous arrêter, ou il est par ailleurs pratique, effectuer un point de contrôle. Écrire un nouvel instantané et tronquer la revue
  • Pour revenir au rouleau ou récupérer d'un coup d'accident ou de puissance, charger le dernier instantané et re-exécuter tous les appels enregistrés dans le journal.

Les précautions nécessaires pour faire ce travail sont les suivants:

  • Ne laissez pas les références d'objets mutables échapper ou entrer dans la couche de prévalence. Vous avez besoin d'une sorte de système proxy ou OID, comme si vous faisiez RPC. (Ceci est par exemple une erreur de débutant commune, il a été surnommé le ' problème de baptême .)
  • Toute la logique accessible à partir d'un appel doit être complètement déterministe, et ne doit pas effectuer des appels d'E / S-sens logique métier ou OS. L'écriture dans un journal de diagnostic est probablement OK, mais obtenir le temps de système ou le lancement d'un délégué asynchrone est généralement pas. Il en est ainsi que la revue rejoue de manière identique, même si elle est restaurée sur une autre machine ou à un autre moment. (La plupart du code de prévalence fournit un appel de temps pour obtenir l'autre horodatage de la transaction.)
  • Writer introduit l'ambiguïté accès concurrentiel dans l'interprétation du journal, il est donc interdit.

Est-ce parce que ...

  • les gens ont développé un mauvais goût pour eux après avoir essayé d'utiliser l'un sur un projet qui ne convenait pas * pour elle?
  • Klaus Wuestefeld strident plaidoyer les gens désactivés ?
  • Les gens qui aiment le modèle de programmation impératif aversion séparation E / S de de calcul, préférant plutôt le calcul intercalez I / O et appelle filetage?
  • couches de prévalence sont si conceptuellement simple et si intimement lié aux caractéristiques du cadre qu'ils habitent qu'ils sont généralement laminés sur mesure pour le projet, ce qui les rend trop exotiques / non standard / risque?
  • il est tout simplement trop difficile de continuer tout droit ce que vous devez faire attention à ne pas faire?
  • Les têtes de newbies semblent juste exploser face à quelque chose qui est pas le même genre d'application axée sur base de données à deux niveaux, ils ont appris à écrire à l'école? ;)

* L'ensemble de données complet RAM dans fits, vous n'avez pas besoin écrivain concurrency, et vous n'avez pas besoin de faire des requêtes ad hoc, des rapports ou exporter vers un entrepôt de données. Avec nos excuses à SQLite, la prévalence est une amélioration de sauvegarde-fichiers, ne remplace pas pour Oracle.

Était-ce utile?

La solution

Je pense que certains du problème est qu'ils ont un cas d'utilisation très spécifique (vous n'êtes pas adapté raison). Je l'ai construit et travaillé sur les systèmes qui utilisent cette approche et quand vous avez un problème qui est en fait ce problème, il peut être une solution merveilleuse.

Une autre partie est qu'il semble il y a beaucoup comme quelques-uns des morceaux les plus douloureux de stockage de données personnalisées que vous avez utilisé pour trouver beaucoup de 10 ans et a quelques-uns des mêmes pièges (pensez lot mis à jour btreive par exemple) qui apporte votre point « trop sur mesure », mais rend aussi difficile de trouver les pièces hors du plateau continental que le travail poliment avec elle.

La dernière partie est qu'ils peuvent être sacrément difficile de requête contre dans de nombreux cas et les gens en général sont assez s'habituer à être en mesure d'obtenir leurs réponses en ce moment.

Autres conseils

Je pense que vous devez d'abord de démontrer que tant de développeurs les déteste. Je ne pense pas que ce soit le cas. Considérez que oiseleur, un certain temps, formalisé un modèle de toutes sortes pour cette .

La réponse à la question est que si la théorie est simple, la pratique n'est pas.

test Juste une telle installation nécessite des dizaines de cas de test, ajouter dans le processus mutli ou un code multithread et cela saute à des centaines de conditions qui doivent tester, à la fois pour la persistance et la récupération.

Tout moniteur de transaction tel que CICS, Tuxedo, Weblogic, Websphere, JBOSS ou .NET, fournira toutes ces installations de façon propre et testé. Et toute base de données fournira transactionnelle / persistance « assez » pour la plupart des applications.

Son essentiellement un cas de cette roue a été inventé et perfectionné depuis longtemps.

Les conditions préalables sembler un peu onéreux au code autour, en particulier avec la plupart des systèmes ne nécessitant pas la conformité ACID lors de l'exécution en mémoire. sons aériens un peu méchant trop - il y a beaucoup de suivi de l'état impliqué là-bas.

Licencié sous: CC-BY-SA avec attribution
scroll top