Hallo,
wie aus dem Titel unschwer zu erkennen ist, beschäftige ich mich gerade mit RCP/RAP-Single Sourcing, dabei bin ich auf ein Problem gestoßen, für das mir gerade keine Lösung einfällt und bei google hab ich auch keine Beispiele dafür gefunden.
Situation:
Ich habe eine Klasse ClassA im Host-Bundle. Diese Klasse enthält eine Methode (doSomething()), die für RCP und RAP unterschiedlich implementiert werden muss. Deshalb habe ich ClassA abstrakt und die Methode statisch gemacht und lasse hier den Aufruf lediglich an die Implementierung (IMPL.doSomethingImpl()) im passenden Fragment delegieren. Das Problem ist, dass ich damit diese abstrakte Klasse nicht mehr instantieren kann, ohne gleich dessen abstrakte Methoden zu implementieren (die ja gerade in den Fragementen implementiert werden soll). Ich brauche aber leider ein Objekt dieser Klasse.
[Java]
public abstract class ClassA {
private static final ClassA IMPL
= (ClassA)ImplementationLoader.createInstance(ClassA.class);
public ClassA(final String someStringArg, final int someIntArg){
//...
}
//DELEGATE
public static String doSomething(final String someArg) {
return IMPL.doSomethingImpl(someArg);
}
//je 1 Implementierung in RAP-Fragment und RCP-Fragment erzwingen
public abstract String doSomethingImpl(final String someArg);
}
[/Java]
Wäre evtl. eine Alternative, die ClassA ein Interface IClassA implementieren zu lassen, das die Fragement-Klassen ClassAImpl in den beiden Fragementen ebenfalls implementieren? Damit würde ja die ClassA sozusagen eine allgemeine Implementierung liefern, die evtl. eine Fehlerausgabe machen könnte, oder so. Wenn alles korrekt funktioniert, dann müsste diese Methode im Host-Bundle ja sowieso von einer Ableitung in einem Fragment überschrieben werden und damit kommt keine Fehlermeldung?!
Wie ist denn da der Best Practice?
Vielen Dank schon mal für die Hilfe
wie aus dem Titel unschwer zu erkennen ist, beschäftige ich mich gerade mit RCP/RAP-Single Sourcing, dabei bin ich auf ein Problem gestoßen, für das mir gerade keine Lösung einfällt und bei google hab ich auch keine Beispiele dafür gefunden.
Situation:
Ich habe eine Klasse ClassA im Host-Bundle. Diese Klasse enthält eine Methode (doSomething()), die für RCP und RAP unterschiedlich implementiert werden muss. Deshalb habe ich ClassA abstrakt und die Methode statisch gemacht und lasse hier den Aufruf lediglich an die Implementierung (IMPL.doSomethingImpl()) im passenden Fragment delegieren. Das Problem ist, dass ich damit diese abstrakte Klasse nicht mehr instantieren kann, ohne gleich dessen abstrakte Methoden zu implementieren (die ja gerade in den Fragementen implementiert werden soll). Ich brauche aber leider ein Objekt dieser Klasse.
[Java]
public abstract class ClassA {
private static final ClassA IMPL
= (ClassA)ImplementationLoader.createInstance(ClassA.class);
public ClassA(final String someStringArg, final int someIntArg){
//...
}
//DELEGATE
public static String doSomething(final String someArg) {
return IMPL.doSomethingImpl(someArg);
}
//je 1 Implementierung in RAP-Fragment und RCP-Fragment erzwingen
public abstract String doSomethingImpl(final String someArg);
}
[/Java]
Wäre evtl. eine Alternative, die ClassA ein Interface IClassA implementieren zu lassen, das die Fragement-Klassen ClassAImpl in den beiden Fragementen ebenfalls implementieren? Damit würde ja die ClassA sozusagen eine allgemeine Implementierung liefern, die evtl. eine Fehlerausgabe machen könnte, oder so. Wenn alles korrekt funktioniert, dann müsste diese Methode im Host-Bundle ja sowieso von einer Ableitung in einem Fragment überschrieben werden und damit kommt keine Fehlermeldung?!
Wie ist denn da der Best Practice?
Vielen Dank schon mal für die Hilfe