Ho una semplice classe ( FileResources
) con metodi di factory statici che forniscono un'implementazione predefinita ( DefaultFileResource
).
public final class FileResources {
private FileResources() {}
public static FileResource get(Path path) {
return new DefaultFileResource(path);
}
}
Il problema con questa classe è che è strettamente associato all'implementazione predefinita ( DefaultFileResource
).
Dato un nuovo requisito che la parte delle classi dell'API ( FileResources
) non può dipendere direttamente dalle classi che non fanno parte dell'API ( DefaultFileResource
) ho pensato che l'unica soluzione è l'inversione del controllo, o l'iniezione di dipendenza o un < s> service provider localizzatore di servizio.
È possibile disaccoppiare FileResources dall'implementazione predefinita ( DefaultFileResource
)?
Per quanto ne so, questo è possibile solo iniettando la dipendenza in FileResources tramite un metodo costruttore, campo o setter.
Il problema principale è che il costruttore di FileResources è privato, inoltre ha solo metodi di factory static.
L'alternativa è il modello di metodo di fabbrica. Ci sarebbe una fabbrica astratta (una classe API) e ci sarebbero fabbriche concrete (classi non API) che potrebbero essere anche iniettate per disaccoppiare le classi API e non API.
In entrambi i casi è necessario un contenitore di dipendenze per gestire il cablaggio.
Che ne pensi? Sto pensando troppo a questo?