Sto sviluppando un piccolo framework (in Scala) in cui voglio definire un'interfaccia pulita e semplice per gli utenti del framework. Alcune di queste interfacce devono essere implementate dal framework stesso, ma voglio nascondere queste implementazioni all'utente per mantenere la "superficie" del framework piccola e semplice.
La mia idea è di avere un pacchetto "interno" all'interno del pacchetto radice del framework in cui tutte queste cose interne entrano.
com/
example/
framework/
internal/
SomeImplementation.scala
SomeInternalThing.scala
SomethingPublic.scala
SomeInterface.scala
Un'altra opzione comune è creare un pacchetto "api" per le cose pubbliche, ma ritengo che il percorso del pacchetto debba essere il più breve possibile per l'utente normale.
com/
example/
framework/
api/
SomethingPublic.scala
SomeInterface.scala
SomeImplementation.scala
SomeInternalThing.scala
Un altro, più radicale, sarebbe creare due progetti separati: uno per l'API pubblica e uno per l'implementazione. Questo è essenzialmente ciò che viene fatto nel mondo Java EE. Ma questo potrebbe essere un po 'eccessivo nel possibile scenario poiché non sto creando uno standard ufficiale.
Cosa preferiresti e perché? Hai altri suggerimenti?