Ho 2 applicazioni una è scritta in C ++ e una è scritta in Java. le applicazioni comunicano passando array di byte che rappresentano un oggetto serializzato.
ogni oggetto di comunicazione rappresenta un comando e contiene l'id del comando e i dati associati.
Userò un esempio per descrivere il mio problema. Diciamo che ho 3 componenti. uno è responsabile della memorizzazione dei dati e del file system, uno è responsabile della presentazione dell'interfaccia utente e uno è responsabile della sicurezza e dell'autorizzazione degli utenti.
Un modo per accedere a un componente specifico consiste nell'avere un punto di accesso che eseguirà un caso di commutazione su tutti i possibili ID di comando.
pseudo:
switch(commandId)
{
case SAVE_FILE:
DATASTORAGE::Save();
break;
case LOAD_FILE:
DATASTORAGE::Load();
break;
case AUTHORIZE:
SECURITY_CONTROLLER::authorize();
break;
case DENY_ACCESS:
SECURITY_CONTROLLER::denyAccess();
...
}
In questo caso, se ho bisogno di cambiare il controller di sicurezza, ho bisogno di cambiare questo punto di ingresso principale.
così invece ho aggiunto un campo extra all'oggetto di comunicazione, che contiene l'id del componente che deve elaborare il comando. In questo caso, se desidero preformare l'autorizzazione, farò quanto segue:
communicationObject.commandId = AUTHORIZE;
communicationObject.target = SECURITY_CONTROLLER_ID;
E il main cambierà caso sugli obiettivi possibili e passerà l'id del comando al componente specfic che è responsabile di quel comando.
switch(target)
{
case SECURITY_CONTROLLER_ID:
SECURITY_CONTROLLER::Process(commandId);
break;
case DATASTORAGE_ID:
DATASTORAGE::Process(commandId);
...
}
Inoltre non mi piace questo nuovo design poiché richiede che il mittente conosca la struttura interna del ricevitore.
d'altra parte, se avessi accesso diretto alle altre classi dell'applicazione (non usando byte [] per le comunicazioni), la seconda opzione verrà mappata su qualcosa come: SECURITY_CONTROLLER :: Authorize (); mentre la prima opzione sarà mappata a qualcosa come Main.AUTHORIZE (), che non è sicuramente la strada da percorrere!
qual è l'approccio migliore in questo caso?