Oggetti PHP con interfacce dati configurabili

2

Ho una classe User che deve caricare i dati da una varietà di fonti, ad es. il database utente principale, i metadati utente WordPress, le autorizzazioni da un'altra app, ecc. Per motivi di organizzazione, voglio separare i diversi caricatori di dati nelle proprie classi. Le chiamate a $user->get_name() potrebbero delegare correttamente a qualsiasi oggetto back-end fornisca queste informazioni.

Come potrebbe questo aspetto in PHP? C'è un nome per questo modello? (E si spera che non sia un anti-pattern.)

Posso anticipare le persone che suggeriscono alcuni oggetti incorporati, come $user->wordpress come interfaccia per il caricatore di WordPress. Ho un ulteriore fattore di complicazione, che non tutti gli utenti sono presenti in tutti i nostri archivi di dati. I miei programmi di caricamento sono in grado di identificare se comprendono e hanno dati per un determinato nome utente / id e vengono caricati nell'oggetto User con un livello di priorità. Un determinato identificatore può solo attivare un sottoinsieme di caricatori di dati, quindi $user->get_name() è essenzialmente un'interfaccia coerente con i dati utente, ovunque sia memorizzata.

Sto valutando la mia configurazione nel tentativo di rendere le cose più testabili, e credo che questo sia un primo passo appropriato.

    
posta Annika Backstrom 23.12.2010 - 11:53
fonte

1 risposta

3

Ehi forse potresti implementare un pattern Composite, con qualcosa del tipo:

Il metodo execute () del componente potrebbe chiamare al suo datasources e così via fino a raggiungere una baseDatasource che potrebbe avere un'altra hireachy, che rappresenta ciascuna fonte.

Ora tornando alle tue necessità, la funzione get_name () potrebbe essere simile a:

public function get_name()
{
  $datasource = $this->getDataSourcesForName();
  return $datasource->execute();
}

Potrebbe essere applicato anche un patter di strategia.

Spero che questo aiuti!

    
risposta data 23.12.2010 - 13:56
fonte

Leggi altre domande sui tag