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.)