Hi
Gegeben ist eine package-Struktur wie
Also ein Package "interfaces", wo ein interface "Something" drin liegt, und ein Unterpackage "impl", wo eine Default-Implementierung des Something-Interfaces liegt. Zum Erstellen von Instanzen gibt es eine Klasse mit einer statischen factory-Methode
Wo wäre dann der geeignetste Ort für diese Klasse? Eigentlich sollte sie nicht im Impl-Package liegen, weil sie ja in bezug auf die API (ja eben gerade) nicht implementierungsspezifisch ist (und eigentlich niemand irgendwas im "impl"-Package zu suchen hat). Aber wenn man sie nicht dort hin legt, sondern ins interfaces-Package oder woanders hin, muss die Default-Implementierung "public" sein, was ja genau das ist, was man eigentlich nicht will (die Impementierung sollte package private sein).
Sowas wie OSGi oder ein DI-Framework erscheint mir für sowas (eine kleine Bibliothek eben) leicht als Overkill.
Im Moment liegen die Factory-Method-Klassen bei mir im Interfaces-Package. Aber ich tendiere dazu, sie ins Impl-Package zu schieben, weil die nicht-Sichtbarkeit der Default-Implementierungen IMHO ein stärkeres Argument ist, als die "Abgeschirmtheit" des Impl-Packages...
(Mal kurz überlegen, ob das überhaupt so wichtig ist, dass ich darüber nachdenken und sogar einen Thread eröffnen sollte :reflect: )
(Ja
)
Gibt's irgendwelche gefestigten, fundierten Meinungen oder best practices dazu?
Gegeben ist eine package-Struktur wie
Code:
(interfaces) : interface Something { }
|
+--(impl) : class DefaultSomething implements Something { }
Java:
class Somethings
{
public static Something createSomething()
{
return new DefaultSomething();
}
}
Sowas wie OSGi oder ein DI-Framework erscheint mir für sowas (eine kleine Bibliothek eben) leicht als Overkill.
Im Moment liegen die Factory-Method-Klassen bei mir im Interfaces-Package. Aber ich tendiere dazu, sie ins Impl-Package zu schieben, weil die nicht-Sichtbarkeit der Default-Implementierungen IMHO ein stärkeres Argument ist, als die "Abgeschirmtheit" des Impl-Packages...
(Mal kurz überlegen, ob das überhaupt so wichtig ist, dass ich darüber nachdenken und sogar einen Thread eröffnen sollte :reflect: )
(Ja
Gibt's irgendwelche gefestigten, fundierten Meinungen oder best practices dazu?