Attualmente sto sviluppando il backend per un'applicazione di notizie, che recupera notizie da vari aggregatori (ad esempio Feedly). Ho pensato che questo fosse un buon esempio per il modello di progettazione dell'adattatore, quindi ecco cosa ho fatto:
Ho creato un file di configurazione che contiene tutte le informazioni rilevanti su ciascun aggregatore, incluso il suo adattatore
return [
'news-api' => [
'url' => 'https://newsapi.org/v2/',
'api-key' => env('NEWS_API_KEY'),
'name' => 'News API',
'adapter' => 'NewsApiAdapter'
],
'feedly' => [
'url' => 'https://cloud.feedly.com/v3/',
'api-key' => env('FEEDLY_API_KEY'),
'name' => 'Feedly',
'adapter' => 'FeedlyApiAdapter'
],
];
Ho creato un'interfaccia che ogni adattatore deve implementare
interface NewsInterface
{
public function fetchNews() : array;
}
E poi ho messo tutto insieme e l'ho usato così
public function handle()
{
foreach ($this->config as $config) {
$adapterClassName = 'App\Adapters\' . $config['adapter'];
$adapterClass = new
$adapterClassName($this->client);
$adapterClass->fetchNews();
}
}
Ora, le mie domande sono le seguenti:
- Si tratta di un caso utile per il modello di progettazione dell'adattatore?
- La mia attuale implementazione utilizza effettivamente il modello di progettazione dell'adattatore?
- Esiste un altro paradigma di progettazione che è più adatto a risolvere questo problema?