Ho oggetti che implementano l'interfaccia BroadcastInterface
, che rappresenta un messaggio che deve essere trasmesso a tutti gli utenti di un particolare gruppo. Ha un metodo setter e getter per le proprietà Subject
e Body
e un metodo addRecipientRole()
, che accetta un determinato ruolo e trova il token contatto (ad esempio, un indirizzo e-mail) per ciascun utente nel ruolo e nei negozi esso. Quindi ha un metodo getContactTokens()
.
BroadcastInterface
oggetti sono passati a un oggetto che implementa BroadcasterInterface
. Questi oggetti sono responsabili della trasmissione di un oggetto BroadcastInterface
passato. Ad esempio, un'implementazione EmailBroadcaster
di BroadcasterInterface
richiederà EmailBroadcast
oggetti e utilizzerà i servizi mailer per inviarli via email.
Ora, a seconda di quale implementazione di BroadcasterInterface
viene utilizzata per trasmettere, una diversa implementazione di BroadcastInterface
viene utilizzata dal codice client. Il Principio di Responsabilità Unica sembra suggerire che dovrei avere un oggetto BroadcastFactory
separato, per creare oggetti BroadcastInterface
, a seconda di quale implementazione di BroadcasterInterface
viene utilizzata, poiché la creazione dell'oggetto BroadcastInterface
è una responsabilità diversa dalla loro trasmissione.
Ma la classe utilizzata per creare oggetti BroadcastInterface
dipende da quale implementazione di BroadcasterInterface
viene utilizzata per trasmetterli. Penso che, poiché la conoscenza del metodo utilizzato per inviare le trasmissioni dovrebbe essere configurata una sola volta, l'oggetto BroadcasterInterface
dovrebbe essere responsabile della fornitura di nuovi oggetti BroadcastInterface
.
La responsabilità di "creare e trasmettere oggetti che implementano l'interfaccia BroadcastInterface
" viola il principio di responsabilità singola?
(Poiché il token di contatto per l'invio della trasmissione agli utenti varia a seconda del modo in cui viene trasmesso, ho bisogno di diverse classi di trasmissione, anche se il codice cliente non sarà in grado di distinguere.)