Delegare il lavoro e programmare le interfacce dei componenti

2

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?

    
posta ksl 04.03.2015 - 14:49
fonte

2 risposte

1

Immagino che l'immagine rappresenti entrambi gli approcci contemporaneamente.

Penso che l'approccio 1 sia il vincitore dell'obluo e che i benefici della programmazione rispetto alle interfacce siano ben documentati.

Vorrei comunque chiedere:

  • Sei sicuro che non ci sia comunanza tra le classi dietro il facadem in modo che tutti possano implementare la stessa interfaccia?

Se MessageHandler è in grado di eseguire tutte le sue chiamate utilizzando un'interfaccia per la facciata, come è possibile che non tutte le classi dietro la facciata non possano implementare la stessa interfaccia. Mi sembra che non ottengano ulteriori informazioni da MessageHandler rispetto a quella consentita dall'interfaccia.

    
risposta data 04.03.2015 - 16:19
fonte
1

Un'interfaccia implementata da una sola classe non ti guadagna nulla in questa situazione. Le interfacce saranno mai implementate da più di una classe? In caso contrario, è stata sostituita una dipendenza per una classe concreta, per una dipendenza da un'interfaccia implementata da una classe concreta, che aggiunge complessità e nessun vantaggio, a meno che il framework di test non debba utilizzare le interfacce.

    
risposta data 04.03.2015 - 17:14
fonte