Ho un repository che contiene le credenziali di accesso
interface LoginCredentialRepository {
LoginCredential fetchCredentials(String username);
}
Per questo framework, sto designando un thread per gestire tutte le attività basate su IO. Questo è solo per convenzione e se qualcuno vuole davvero inviare un'attività basata su IO a un diverso Executor
, suppongo che possano farlo.
Perché intendo avere questo thread IO designato, dovrei cambiare l'interfaccia in
Callable<LoginCredential> fetchCredentials(String username);
In modo che il chiamante deve solo fare
ioThread.submit(repository.fetchCredentials("foo"));
invece di qualcosa di simile
ioThread.submit(() => return repository.fetchCredentials("foo"));
Da una parte, poiché so che il modo consigliato di elaborare attività IO è di inviarle all'IO Thread, mi sento come se dovessi rendere più semplice il lavoro del chiamante e solo restituirgli quello che verrà utilizzato.
D'altra parte, il repository sa che quando viene chiamato fetchCredentials
, in realtà non restituirà le credenziali, ma piuttosto un modo di recuperare le credenziali, richiedendo al chiamante di fare
Future<LoginCredential> credentialFuture = ioThread.submit(repository.fetchCredentials("foo"));
LoginCredentials credentials = credentialFuture.get();