Sono in procinto di progettare una classe di facciata ApiClient che astragga alcune operazioni CRUD tra un database locale e uno remoto (tramite un'applicazione web REST).
La classe ApiClient detta dipende da altre 2 classi di implementazione (chiamiamole local repo e remote repo , le cui responsabilità sono di interagire rispettivamente con il driver del database locale e con un client http.
Detto questo, alcune risorse (chiamiamolo ResourceA ) devono essere salvate localmente dopo essere state recuperate dalla rete, ma non possono essere salvate sulla rete. Un esempio di ciò sarebbe il recupero di un elenco di ResourceA e il salvataggio di ciascun elemento localmente, ma non c'è creazione di ResourceA né l'aggiornamento sul lato server.
Fino a questo punto, local repo dovrebbe implementare un'operazione save(ResourceA) , ma remote repo non dovrebbe.
Quindi la domanda è: queste 2 classi dovrebbero essere un'implementazione di 2 interfacce diverse ( local repo interface e remote repo interface ), o entrambe dovrebbero implementare una singola interfaccia, ma su save operazione remote repo dovrebbe lanciare un invalid operation exception ?