Voglio costruire un'API (Java) che si basa in gran parte su un oggetto di connessione su un server di dati che gestisce una connessione a un dispositivo reale. Tutto quello che ho è un oggetto DeviceConnection
. Attualmente ho una grande classe che presenta all'utente tutto ciò che il dispositivo può fare e gestire l'oggetto di connessione all'interno di quella classe.
Funziona abbastanza bene quando si lavora con l'API così com'è, ma diventa molto complesso e difficile da usare quando si prova a metterlo alla prova. Inoltre viola il Principio di Responsabilità Unica.
Come strutturate un'API, in cui quasi tutte le chiamate dipendono da un singolo oggetto di connessione? Per quanto riguarda le chiamate che configurano semplicemente il dispositivo e le chiamate che restituiscono alcune informazioni specifiche del dispositivo piuttosto poco interessanti?
Questo è quello che vorrei pensare:
DeviceConnection conn = new DeviceConnection();
conn.connect(connectionData);
// This one is kinda ok
DeviceDataReceiver dataRec = new DeviceDataReceiver(conn);
Data data = dataRec.getData();
// This one feels like i don't really need the object
DeviceInformation devInfo = new DeviceInformation(conn);
Information info = devInfo.getInfo();
// This one feels really awkward to use
DeviceSettingsManager settingsManager = new DeviceSettingsManager(conn);
settingsManager.setOptionA(true);
Come architetti questo tipo di API? Come dovrei nominare le mie classi? Come devo passare il mio oggetto di connessione?
Non è che i miei approcci non funzionino, è solo che al momento non sembra una buona API.