Una classe può rappresentare due implementazioni?

1

Non sono sicuro di molte cose:

  • Ho una classe che implementa un'interfaccia NotificationDispatcher . Questa classe I ha chiamato WhatsappNotificationDispatcher , un'altra implementazione è di EmailNotificationDispatcher .

  • La consegna del messaggio Whatsapp è implementata dall'API di un fornitore di servizi esterno.

Quindi ora ho una classe che entrambi

[1] Implementa un tipo di invio (Whatsapp) [2] Implementa un fornitore di servizi per quel tipo

E per peggiorare le cose, tutto sta accadendo nel mio livello di applicazione. Perché WhatsappNotificationDispatcher è un'implementazione di un'API, ma è anche un servizio.

Devo spostare l'implementazione nel livello infrastruttura sempre ? E devo creare un'interfaccia aggiuntiva per WhatsappNotificationDispatcher , implementare una specifica API del fornitore di servizi? Sembra una follia.

    
posta Michael 21.09.2018 - 14:37
fonte

1 risposta

1

Se comprendo bene, WhatsappNotificationDispatcher implementa direttamente le richieste a un fornitore di servizi esterno.

Ho cercato di mostrarlo in questo diagramma, dove ResAPI è un proxy che aiuta a instradare le richieste APU generali a provider esterni:

Primadituttoquestomisembraperfetto:latuaclasseimplementaun'interfacciaequestorichiedediinviarerichiesteall'esternousandoun'API.

Oranonriescodavveroaimmaginarediimplementareunarichiestadibassolivellosuhttpnellatuaclasseconlagestionedellesessioniecc.Eccoperchéhoaggiuntoilproxypergestirlo.Questoproxygenericositrovanellivelloinfrastruttura.

Unapprocciomiglioreèincapsularel'APIspecificastessa,utilizzandoil schema del gateway . Il livello di dispatcher fornisce un servizio di applicazione e rimarrebbe nel livello dell'applicazione. Il gateway sarebbe tuttavia in un livello inferiore (allo stesso livello di accesso ai dati). Questo design avrebbe l'ulteriore vantaggio di rendere la tua SRP di classe conforme.

Tuttavia, se si utilizza solo l'API del provider del servizio Whatsapp per il dispatcher delle notifiche, questo gateway separato aggiuntivo potrebbe essere un sovraccarico non necessario. Quindi dovrai decidere in base all'immagine completa. In questo caso, intuitivamente avrei lasciato la classe nel livello dell'applicazione, ma si poteva difendere anche l'opposto (sicuro che non vorresti affatto il gateway?).

    
risposta data 21.09.2018 - 21:54
fonte

Leggi altre domande sui tag