Ho intenzione di scrivere una libreria in Java, composta dai pacchetti A, B, C e così via. Ogni pacchetto racchiude una parte del quadro generale. B si basa su A, C su B e così via. Per questo scopo ogni pacchetto offre una singola classe per il prossimo pacchetto. Tuttavia, ogni pacchetto è facoltativo in quanto l'utente può decidere di sostituire la propria implementazione. Come faccio a costruire le interfacce (concetto, non entità Java) tra i pacchetti?
La mia prima idea era quella di mettere semplicemente un'interfaccia (entità Java) e una classe di implementazione nel pacchetto con numero ordinale più basso, cioè interfaccia AtoB e classe AtoBImpl in A ecc. Tuttavia, se un utente della libreria desidera utilizzare il pacchetto B ma fornisce la propria implementazione per A, non solo devono importare B. *, ma anche A.AtoB. Anche se questo potrebbe non essere un grosso problema, sembra che potrebbe esistere una soluzione migliore.
La mia seconda idea era di creare pacchetti aggiuntivi solo per le interfacce, ovvero un pacchetto AtoB contenente un'interfaccia AtoB. L'implementazione di quello sarebbe ancora in A. Un utente che usa B ma non A ora deve importare B. * e AtoB. *, Ma non rimane alcun riferimento ad A. Mi sembra più pulito ma anche più ingombrante.
La mia terza idea era quella di mettere tutte le interfacce in un pacchetto comune, ovvero un pacchetto inter contenente le interfacce AtoB, BtoC, ecc.
C'è una buona pratica? O un altro, un approccio migliore? Sto spaccando i capelli? Grazie!