Come denominare diversi componenti nel modello di adattatore?

-2

(codice di esempio in PHP, ma può essere applicato a più lingue)

Ho uno scenario con un modello di adattatore, in cui ho classi, interfacce e oggetti con ruoli diversi, ad esempio:

  1. Un oggetto originale che implementa CatInterface .
  2. Una classe che implementa DogInterface , che include un oggetto CatInterface .
  3. Un'istanza di quella classe, che avvolge l'oggetto $cat .
  4. Un oggetto servizio, che racchiude gli oggetti cat in nuove istanze dell'adattatore.

La mia domanda: in questo scenario, qual è il componente "adattatore"?

es. l'oggetto servizio potrebbe essere simile a questo:

class CatDogAdapter {
  function adapt(CatInterface $cat) : DogInterface {
    return new DogFromCat($cat);
  }
}

$adapter = new CatDogAdapter();
$cat = new Cat;
$dog = $adapter->adapt($cat);

In questo esempio, ho usato il termine "adattatore" nel nome dell'oggetto / classe del servizio. Ma è questo il modo comune in cui viene usato il nome? O dovrei piuttosto usare il termine "adattatore" per la classe "DogFromCat" e nominare il servizio, ad es. "AdapterFinder" o "AdapterFactory"?

Ideal sarebbe letteratura o esempi che indicano una pratica comune nel nominare questi componenti.

Forse un tale consenso non esiste, ed è tutto selvaggio west - in questo caso la domanda non va da nessuna parte, e devo decidere per me stesso.

Sto taggandolo come PHP e Java, perché penso che la domanda si applicherebbe a entrambe le lingue.

EDIT: Perché una fabbrica di adattatori?

La risposta che ho ottenuto finora suggerisce che l'esempio potrebbe essere troppo banale.

Il mio caso d'uso effettivo è qualcosa del genere:

// Maybe $adapter should rather be named $adapterFactory?
$dogFromCat = $adapter->adapt($cat, DogInterface::class);

C'è una logica di mappatura che determina quale classe dell'adattatore usare a seconda del tipo di ritorno desiderato e del tipo di oggetto da adattare.

Ma anche con l'esempio più semplice che costruisce solo oggetti DogFromCat, ci possono essere dei motivi per avere un tale oggetto factory dell'adattatore:

  • Può essere distribuito come dipendenza da altri componenti.
  • Può contenere dipendenze da iniettare in DogFromCat oltre all'oggetto $ cat.
  • Può comportarsi in modo diverso per diversi sottotipi di cat.

Come suggerisce il testo di questa modifica, il modo migliore per nominarlo potrebbe essere "AdapterFactory". Quindi forse ho risposto io stesso alla mia domanda in questo modo.

    
posta donquixote 03.12.2017 - 20:08
fonte

1 risposta

1

La tua classe DogFromCat è un'istanza del Pattern adattatore adattatore come definito nel libro Modelli di design . Il suo nome va bene, in alternativa potrebbe essere stato chiamato CatToDogAdapter .

La tua classe CatDogAdapter è una sorta di factory che crea tale adattatore. Molto probabilmente può essere eliminato dal tuo design senza alcun inconveniente. Puoi semplicemente chiamare direttamente il costruttore dell'adattatore. L'unica ragione per mantenere questo factory sarebbe se avessi implementazioni diverse dell'adattatore e avresti bisogno di selezionarle in fase di runtime, ad es. per l'iniezione di dipendenza. Ma sarebbe insolito.

    
risposta data 04.12.2017 - 08:49
fonte

Leggi altre domande sui tag