Ho una classe MessageHandler che riceve e convalida i messaggi prima di determinare quali componenti dell'architettura devono essere delegati per poterli elaborare. Ciò implica chiamare funzioni con nomi diversi e possibilmente diverse firme su classi in componenti diversi.
Qual è il modo migliore per implementare la delega?
Lo schema seguente mostra due possibili approcci.
Opzione 1 - ogni componente che deve elaborare i messaggi espone un'interfaccia, che è realizzata da una facciata. Per ogni messaggio, MessageHandler richiama l'operazione appropriata sull'interfaccia e la facciata lo delega alla classe appropriata internamente.
Opzione 2: per ogni messaggio, MessageHandler chiama l'operazione appropriata direttamente nel componente pertinente.
Valutando i vantaggi / gli svantaggi di ciascuno:
L'opzione 2 significa inquinare il gestore di messaggi con un handle di ogni classe in ogni componente che elaborerà un messaggio. Rende inoltre più difficile testare il gestore di messaggi in isolamento. Non sembra giusto.
Opzione 1: sembra un approccio migliore. Il gestore di messaggi dipende da un'interfaccia anziché da classi concrete, il che rende anche più facile il test.
Mi chiedo se l'opzione 1 sia un buon approccio? O c'è un modo migliore per ottenere ciò che voglio?