2011-09-17 10 views
6

Attualmente sto scrivendo alcune classi per gestire la localizzazione in un'applicazione web PHP.Come sbarazzarsi di questa dipendenza circolare?

Le classi sono:

  • Locale - Si occupa di impostare e ottenere locale, fuso orario, lingua dell'utente.
  • LocaleFormat - offerte con le date di formattazione, le regole di confronto, i formati di valuta, ecc
  • Timezone - offerte con la compilazione di un elenco dei fusi orari per i paesi e le altre funzioni relative alla fusi orari.
  • LocaleData: estrapola dati locali, ad esempio formati di indirizzo e cose come le espressioni regolari del codice postale.

L'intera applicazione funziona correttamente, ma ho bisogno di aggiungere alcune altre cose a Fuso orario.

Questo risultato in questo problema: Locale richiede i metodi del fuso orario che richiede i metodi di LocaleData che richiedono i metodi di Locale.

Come posso interrompere questa dipendenza circolare? Devo rompere le mie lezioni in pezzi più piccoli? Ci sono schemi per affrontare questo?

Saluti :)

risposta

2

Se si chiama solo metodi di altre classi, caricare tutte le classi prima, quindi è possibile chiamare i metodi tra le classi. Non eseguire alcuna inizializzazione all'interno dei file di classe, che dovrebbe essere eseguita in un file "loader" separato che "include" i file, quindi chiama l'inizializzazione.

Se si ottengono dipendenze circolari basate su classi che estendono altre classi, è necessario ripensare l'intera configurazione.

+0

Il problema che stavo affrontando era dovuto al fatto che le classi chiamavano il metodo l'una nell'altra. Dal momento che sto usando l'iniezione del costruttore usando un framework DI, le dipendenze sono istanziate dal framework DI. La soluzione è che c'è un metodo in Fuso orario che si comporta più come un formattatore, quindi l'ho spostato in LocaleFormat. – F21

Problemi correlati