it-swarm-es.com

¿Por qué tantos programadores odian absolutamente las capas de predominio de objetos?

La prevalencia es una técnica simple para proporcionar propiedades ACID a un modelo de objetos en memoria basado en la serialización binaria y el registro de escritura anticipada. Funciona así:

  • Empiece con una instantánea. Serialice el modelo de objetos y escríbalo en un archivo.
  • Cree un archivo de diario. Para cada llamada al modelo de objetos, serialice la llamada y sus argumentos.
  • Cuando el diario se vuelve demasiado grande, está cerrando, o si es conveniente, realice un punto de control: escriba una nueva instantánea y trunque el diario.
  • Para retroceder o recuperarse de un accidente o golpe de energía, cargue la última instantánea y vuelva a ejecutar todas las llamadas registradas en el diario.

Las precauciones necesarias para que esto funcione son:

  • No permita que las referencias de objetos mutables se escapen o entren en la capa de prevalencia. Necesita algún tipo de proxy o esquema OID, como si estuviera haciendo RPC. (Este es un error de novato tan común que ha sido apodado el ' problema de bautismo '.)
  • Toda la lógica a la que se pueda acceder desde una llamada debe ser completamente determinista y no debe realizar llamadas de E/S o SO significativas para la lógica empresarial. Escribir en un registro de diagnóstico probablemente esté bien, pero obtener la hora del sistema o iniciar un delegado asincrónico generalmente no lo es. Esto es para que el diario se reproduzca de manera idéntica incluso si se restaura en una máquina diferente o en un momento diferente. (La mayoría de los códigos de prevalencia proporcionan una llamada de hora alternativa para obtener la marca de tiempo de la transacción).
  • La concurrencia de escritores introduce ambigüedad en la interpretación de la revista, por lo que está prohibida.

Es porque ...

  • la gente desarrolló un mal gusto por ellos después de intentar usar uno en un proyecto que no era adecuado* ¿lo?
  • ¿La defensa estridente de Klaus Wuestefeld apagó a la gente ?
  • ¿A las personas a las que les gusta el modelo de programación imperativo no les gusta separar la E/S del cálculo , prefiriendo en cambio intercalar el cálculo con las E/S y las llamadas de subprocesos?
  • las capas de prevalencia son tan conceptualmente simples y tan íntimamente ligadas a las características del marco en el que habitan que generalmente están diseñadas a medida para el proyecto, lo que las hace demasiado extrañas/no estándar/arriesgadas.
  • es demasiado difícil mantener la línea recta ¿qué hay que tener cuidado de no hacer?
  • las cabezas de los novatos parecen explotar cuando se enfrentan a algo que no es el mismo tipo de aplicación de base de datos de dos niveles que aprendieron a escribir en la escuela. ;)

*El conjunto de datos completo cabe en la RAM , no necesita concurrencia de escritor y no necesita hacer consultas ad-hoc, informes o exportar a un almacén de datos. Con disculpas a SQLite, la prevalencia es una mejora en los archivos guardados, no un reemplazo para Oracle.

9
Jeffrey Hantin

Creo que parte del problema es que tienen un caso de uso MUY específico (su razón no adecuada). He construido y trabajado en sistemas que utilizan este enfoque y cuando tienes un problema que en realidad es este problema, puede ser una solución maravillosa.

Otra parte es que se parece mucho a algunos de los bits más dolorosos de almacenamiento de datos personalizados que solía encontrar hace más de 10 años y tiene algunos de los mismos escollos (piense en btreive actualizado por lotes, por ejemplo) que trae su "demasiado personalizado", pero también hace que sea difícil encontrar piezas listas para usar que funcionen cortésmente con él.

La última parte es que en muchos casos puede ser muy difícil consultarlos y la gente en general está bastante acostumbrada a poder obtener sus respuestas ahora mismo.

6
Bill

Creo que primero debes demostrar que muchos desarrolladores los odian. No creo que ese sea el caso. Considere que el cazador, hace un tiempo, formalizó una especie de patrón para esto aquí .

11
Steven Evers

La respuesta a la pregunta es que si bien la teoría es simple, la práctica no lo es.

Solo probar una configuración de este tipo requiere docenas de casos de prueba, agregar procesos mutli o código multiproceso y esto salta a cientos de posibles condiciones que deben probarse, tanto para la persistencia como para la recuperación.

Cualquier monitor de transacciones, como CICS, Tuxedo, Weblogic, Websphere, JBOSS o .NET, proporcionará todas estas facilidades de una manera limpia y probada. Y cualquier base de datos proporcionará transacciones/persistencia "suficiente" para la mayoría de las aplicaciones.

Es principalmente un caso de esa rueda que se inventó y perfeccionó hace mucho tiempo.

4
James Anderson

Los requisitos previos suenan un poco onerosos de codificar, especialmente con la mayoría de los sistemas que no necesitan el cumplimiento de ACID cuando se ejecutan en la memoria. Los gastos generales también suenan un poco desagradables: hay mucho seguimiento de estado involucrado allí.

2
Wyatt Barnett