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
?