¿Se combinan los agregados definidos por el consumidor (por ejemplo, recuentos de SQL) con objetos modelo "puros"?

StackOverflow https://stackoverflow.com/questions/619698

  •  03-07-2019
  •  | 
  •  

Pregunta

¿Cuál es la mejor práctica de introducir datos personalizados (generalmente volátiles) en las clases del modelo de entidad? Esto puede sonar como una mala práctica primero, pero parece ser un escenario bastante común. En nuestra aplicación web reciente, hemos desarrollado un modelo adecuado y en la mayoría de los casos estamos bien con la carga de entidades modelo. Pero hay casos en los que no podemos permitirnos cargar una jerarquía completa de entidades; necesitamos cargar, digamos, los resultados de un par de SQL COUNT & # 8217; s o posiblemente alguna información adicional junto (o incrustada dentro) de las entidades modelo. Así que básicamente, los requisitos y condiciones son:

  1. Es una aplicación web en la que el 99,99999999999% de todas las operaciones son operaciones de lectura.

  2. No necesitan procesar o hacer ninguna lógica de negocios complicada. Solo necesitamos obtener datos rápidamente a HTML.

  3. En varios casos críticos de rendimiento, debemos cargar los resultados de los agregados de SQL que no se ajustan a las propiedades del modelo.

  4. Necesitamos una forma extensible de introducir nuevos datos personalizados si es necesario.

¿Cómo suele resolver este problema sin trabajar demasiado alrededor de su ORM (por ejemplo, datos en bruto de db)? Estoy seguro de que esto se ha discutido muchas veces, pero no puedo encontrar una buena consulta de Google para encontrar algo útil.

Editar : como más tarde me di cuenta de que la pregunta no estaba muy bien formada, decidí reformularla y comenzar una uno nuevo .

¿Fue útil?

Solución

Si solo estás obteniendo datos relacionales desde y hacia un navegador, con poco o ningún comportamiento intermedio, parece que estás tratando de resolver un problema relacional con un paradigma OO.

Podría estar inclinado a prescindir completamente del enfoque orientado a objetos.

Mi equipo recientemente reescribió una aplicación al preguntar " ¿Cuál es la cosa más simple que puede funcionar? " y " ¿Cuál es el idioma más cercano al problema? " ;. Nuestra nueva aplicación, que reemplazó una OO, terminó siendo 10 veces más pequeña, más rápida y más barata.

Utilizamos SQL, procedimientos almacenados, bibliotecas XML en el servidor DB, XSLT (para obtener el HTML) y javascript.

Otros consejos

OOP purista como yo iría al patrón Decorador. http://en.wikipedia.org/wiki/Decorator_pattern

Pero la cuestión es que algunas personas pueden no necesitar la flexibilidad que ofrece. Además, la creación de nuevas clases para cada operación distinta puede parecer una exageración, pero proporciona una buena verificación del tipo de compilación.

La mejor práctica desde mi punto de vista es que su aplicación consume datos usando el patrón Modelo de dominio . El modelo de dominio puede ofrecer métodos de lógica de negocios para hacer el tipo de consultas que tengan sentido y que sean relevantes para las necesidades de su aplicación.

Estos pueden buscar " en vivo " los resultados que se asignan directamente a las filas de la base de datos y, por lo tanto, se pueden editar y guardar " "

Pero, además, el Modelo de dominio puede proporcionar métodos que obtienen resultados de solo lectura que son demasiado complejos para volver a guardarlos fácilmente en la base de datos. Esto incluye su ejemplo de resultados de consultas agregadas agrupadas, y también incluye conjuntos de resultados de consultas unidas, expresiones como columnas, etc.

El patrón de modelo de dominio ofrece una manera de desacoplar el diseño OO de una aplicación del diseño de la base de datos física.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top