He estado luchando para encontrar una buena manera de poner en práctica mi sistema que coincide esencialmente la temporada y el número de episodio de un show de una cadena, se puede ver el código actual de trabajo aquí: https://github.com/huddy/tvfilename¿Cuál es el patrón de diseño correcto para mi aplicación PHP?
Actualmente estoy reescribiendo este biblioteca y quiere una manera más agradable de implementar cómo ocurre la coincidencia, actualmente esencialmente la forma en que funciona es:
Hay una carpeta con clases (llamados manejadores), cada controlador es una clase que implementa una interfaz para garantizar una método llamado match(); existe, este método de coincidencia usa la expresión regular almacenada en una propiedad de esa clase de controlador (de la que hay muchas) para intentar hacer coincidir una temporada y un episodio.
La clase carga todos estos controladores instanciando cada uno en una matriz almacenada en una propiedad, cuando quiero probar y hacer coincidir algunas cadenas, el método itera sobre estos objetos llamando a match(); y el primero que devuelve verdadero se devuelve en un conjunto de resultados con la temporada y el episodio coincidentes.
Realmente no me gusta esta forma de hacerlo, es un poco raro para mí, y espero que un patrón de diseño pueda ayudar, mi objetivo final es hacer esto usando las mejores prácticas y me pregunto cuál ¿debería usar?
Los otros problemas que existen son:
Más de un manejador podría coincidir con una cadena, por lo que tienen que estar en una orden para evitar los más codiciosos juego en primer lugar, no estoy seguro si esto es solucionable como algunos de los patrones de expresiones regulares tienen que ser codiciosos, pero posiblemente un sistema de puntuación, algo que muestra un porcentaje de la probabilidad de que el partido sea correcto, aunque no tengo idea de cómo implementarlo.
No estoy si crear una instancia de todos esos controladores es una buena forma de hacerlo, la velocidad es importante, pero usar las mejores prácticas y seguir patrones de diseño para crear código bueno, extensible y mantenible es mi máxima prioridad. Vale la pena señalar las clases de controlador a veces hacen otras cosas que el juego acaba de expresiones regulares, a veces preparar la cadena que se corresponde con la eliminación de las palabras comunes, etc.
Saludos para cualquier ayuda Billy
Puede consultar [Rutas de la Horda] (http://dev.horde.org/routes/). –
Estás pensando demasiado en esto. Su problema de avaricia puede resolverse fácilmente ordenando la matriz de menos codiciosos a los más codiciosos, y sus expresiones regulares pueden ser todas en una sola clase. No veo un enfoque más directo o más limpio que eso. –