Trabajando en un proyecto que analiza un registro de eventos y luego actualiza un modelo basado en las propiedades de esos eventos. He sido muy perezosa sobre "hacer las cosas" y más preocupado por la optimización inicial, el código delicado y los patrones de diseño adecuados. Sobre todo, un experimento autodidacta. Me interesan los patrones que los diseñadores más experimentados consideran relevantes, o qué tipo de arquitectura de objetos pseudocodificados sería la mejor, la más fácil de mantener, etc.¿Patrón de diseño apropiado para un analizador de registro de eventos?
Puede haber 500,000 eventos en un solo registro, y hay alrededor de 60 tipos de eventos, todos los cuales comparten aproximadamente 7 propiedades base y luego tienen de 0 a 15 propiedades adicionales según el tipo de evento. El tipo de evento es la segunda propiedad en el archivo de registro en cada línea.
Así que he intentado con un analizador sintáctico realmente feo que recorre el registro línea por línea y luego procesa los eventos línea por línea. Luego probé una especificación léxica que usa un patrón "nextEvent", que se llama en un ciclo y se procesa. Luego probé un método simple y antiguo de "análisis sintáctico" que nunca regresa y simplemente activa eventos para llamadas de escucha registradas. Intenté una devolución de llamada única independientemente del tipo de evento y un método de devolución de llamada específico para cada tipo de evento.
He intentado una clase base de "eventos" con una unión de todas las propiedades posibles. Intenté evitar la llamada al "nuevo evento" (ya que puede haber una gran cantidad de eventos y los objetos del evento generalmente son de corta duración) y tener los métodos de devolución de llamada por tipo con argumentos de propiedad primitivos. Intenté tener una subclase para cada uno de los 60 tipos de eventos con un elemento primario de evento abstracto con las 7 propiedades básicas comunes.
Recientemente traté de llevar eso más allá y usando un patrón de comando para poner el código de manejo de eventos por tipo de evento. No estoy seguro de que me guste esto y es realmente similar a las devoluciones de llamada por enfoque de tipo, solo el código está dentro de una función de ejecución en las subclases de tipo frente a los métodos de devolución de llamada por tipo.
El problema es que una gran parte de la lógica de actualización del modelo es compartida, y muchas de ellas son específicas de la subclase, y estoy empezando a confundirme sobre el asunto. ¡Espero que alguien pueda al menos señalarme en una dirección para considerar!
Bueno, estoy bastante seguro de que quiero seguir con las primitivas como propiedades de eventos, ya que son conocidas y constantes y me preocupa mucho el rendimiento. Quiero generar un informe de información agregada sobre fragmentos de los eventos. Después del hecho, pero quiero procesar secuencialmente (¿determinísticamente?). – Josh