Actuellement, nous avons un projet qui est organisé de la façon suivante :
- com.toto.common : branche commune
- com.toto.defaultimplementation : classes utilisées par défaut.
- com.toto.implementationxxx : implémentation spécifique
Au runtime, l'implémentation est choisie en fonction d'une propriété
système.
Les classes ayant besoin d'une implémentation spécifique ne sont pas créées
par des new mais
par une factory qui va retourner soit la classes de l'implementationxxx soit
celle de
defaultimplementation suivant qu'elle existe ou non.
Serait il possible de supprimer cette factory et de la remplacer par un
customClassLoader
qui va renvoyer la classe d'implémentation à utiliser (En utilisant un
boostrap et
en redéfinissant la méthode findClass) ?
Cette action est irreversible, confirmez la suppression du commentaire ?
Signaler le commentaire
Veuillez sélectionner un problème
Nudité
Violence
Harcèlement
Fraude
Vente illégale
Discours haineux
Terrorisme
Autre
Olivier Pierrier
Salut,
Sébastien Boutté wrote:
Bonjour,
Actuellement, nous avons un projet qui est organisé de la façon suivante :
- com.toto.common : branche commune - com.toto.defaultimplementation : classes utilisées par défaut. - com.toto.implementationxxx : implémentation spécifique
Au runtime, l'implémentation est choisie en fonction d'une propriété système. Les classes ayant besoin d'une implémentation spécifique ne sont pas créées par des new mais par une factory qui va retourner soit la classes de l'implementationxxx soit celle de defaultimplementation suivant qu'elle existe ou non.
Ton probleme se resout avec le pattern AbstractFactory. Elle te retournera La factory specifique qui pourra heriter de la factory DefaultTotoFactory.
Le code Grosso modo : public class TotoAbstractFactory { TotoFactory getFactory( Param pour determine l'implementation ); }
DefaultTotoFactory implements TotoFactory { public Foo createFoo(){} public Bar createBar(){} }
MyTotoFactory extends DefaultTotoFactory { public Bar createBar(){} }
De cette facon seule Bar a une implementation particuliere, et dans tous les cas Foo est de l'implementation par defaut.
En plus pas besion de s'embeter avec un classloader
Olivier
Salut,
Sébastien Boutté wrote:
Bonjour,
Actuellement, nous avons un projet qui est organisé de la façon suivante :
- com.toto.common : branche commune
- com.toto.defaultimplementation : classes utilisées par défaut.
- com.toto.implementationxxx : implémentation spécifique
Au runtime, l'implémentation est choisie en fonction d'une propriété
système.
Les classes ayant besoin d'une implémentation spécifique ne sont pas créées
par des new mais
par une factory qui va retourner soit la classes de l'implementationxxx soit
celle de
defaultimplementation suivant qu'elle existe ou non.
Ton probleme se resout avec le pattern AbstractFactory.
Elle te retournera La factory specifique qui pourra heriter de la
factory DefaultTotoFactory.
Le code Grosso modo :
public class TotoAbstractFactory
{
TotoFactory getFactory( Param pour determine l'implementation );
}
DefaultTotoFactory implements TotoFactory
{
public Foo createFoo(){}
public Bar createBar(){}
}
MyTotoFactory extends DefaultTotoFactory
{
public Bar createBar(){}
}
De cette facon seule Bar a une implementation particuliere, et dans tous
les cas Foo est de l'implementation par defaut.
En plus pas besion de s'embeter avec un classloader
Actuellement, nous avons un projet qui est organisé de la façon suivante :
- com.toto.common : branche commune - com.toto.defaultimplementation : classes utilisées par défaut. - com.toto.implementationxxx : implémentation spécifique
Au runtime, l'implémentation est choisie en fonction d'une propriété système. Les classes ayant besoin d'une implémentation spécifique ne sont pas créées par des new mais par une factory qui va retourner soit la classes de l'implementationxxx soit celle de defaultimplementation suivant qu'elle existe ou non.
Ton probleme se resout avec le pattern AbstractFactory. Elle te retournera La factory specifique qui pourra heriter de la factory DefaultTotoFactory.
Le code Grosso modo : public class TotoAbstractFactory { TotoFactory getFactory( Param pour determine l'implementation ); }
DefaultTotoFactory implements TotoFactory { public Foo createFoo(){} public Bar createBar(){} }
MyTotoFactory extends DefaultTotoFactory { public Bar createBar(){} }
De cette facon seule Bar a une implementation particuliere, et dans tous les cas Foo est de l'implementation par defaut.
En plus pas besion de s'embeter avec un classloader