2011-09-17 12 views
6

Actualmente estoy escribiendo algunas clases para tratar la localización en una aplicación web PHP.¿Cómo deshacerse de esta dependencia circular?

Las clases son:

  • Locale - Se ocupa de establecer y obtener la configuración regional, la zona horaria, el idioma del usuario.
  • LocaleFormat - Ofrece fechas de formato, colaciones, formatos de moneda, etc.
  • Zona horaria: se trata de compilar una lista de zonas horarias para países y otras funciones relacionadas con zonas horarias.
  • LocaleData - Obtiene datos de configuración regional, por ejemplo, formatos de direcciones y cosas como expresiones regulares de código postal.

Toda la aplicación funciona correctamente, pero necesito agregar algunas cosas más a Timezone.

Esto da como resultado este problema: La configuración regional requiere métodos de Timezone que requieren los métodos de LocaleData que requieren los métodos de Locale.

¿Cómo puedo romper esta dependencia circular? ¿Debo dividir mis clases en pedazos más pequeños? ¿Hay algún patrón para lidiar con esto?

Saludos :)

Respuesta

2

Si sólo está llamando métodos de otras clases, cargar todas las clases en primer lugar, a continuación, puede llamar a los métodos entre las clases. No realice ninguna inicialización dentro de los archivos de la clase, esto debe hacerse en un archivo "cargador" separado que "incluye" los archivos, luego llama a la inicialización do.

Si obtiene dependencias circulares basadas en clases que amplían otras clases, entonces debe reconsiderar toda la configuración.

+0

El problema que estaba enfrentando se debía al método de llamadas entre clases. Dado que estoy usando la inyección de constructor usando un marco DI, las dependencias son instanciadas por el marco DI. La solución es que hay un método en Timezone que se comporta más como un formateador, así que simplemente lo moví a LocaleFormat. – F21

Cuestiones relacionadas