Envoyé par
pseudocode
<hors sujet>
Hum... il m'a l'air louche ton DP Proxy. Je ne vois pas trop a quoi sert l'invocation dynamique des methodes. Pourquoi ne pas appeler directement les methodes de ton objet Receiver ? C'est parceque tu ne connais pas son interface, ou c'est pour etre extensible ?
</hors sujet>
<hors sujet mais c'est intérressant>
La classe Proxy appartient à l'API de réflection, et permet de générer des implémentation générique. Un des meilleurs exemple que je connaisse vient de l'API EoD SQL dont j'ai déjà parlé.
Grosso-modo cela permet de faire des mapping Object-SQL très facilement, comme le montre cet exemple :
http://eodsql.sourceforge.net/about.html#example
1 2 3 4 5 6 7 8 9 10 11 12 13 14
| // The Query interface
public interface UserQueries extends BaseQuery {
@Select("SELECT * FROM users WHERE password = ?1")
public DataSet<User> getUsersByPassword(String password);
@Select("SELECT * FROM users WHERE id = ?1")
public User getUserbyId(Integer id);
// Declaring SQLExceptions is entirely optional.If you don't declare them
// in a throws clause, they'll be wrapped in a RuntimeException for you.
@Update("UPDATE users SET username = ?{1.username}, " +
"password = ?{1.password}, birth_date = ?{1.birthDate} WHERE id = ?{1.id}")
public int updateUser(User user) throws SQLException;
} |
Le code des méthode de ces interfaces est générique, puisqu'il suffit d'exécuter le code SQL contenu dans l'annotation, et de mapper le résultat vers les objets en retour. Il est ainsi possible de faire une méthode unique et le proxy permet donc de renvoyer les appel vers une méthode invoke() qui comportement tout les traitements.
Grosso-modo à l'utilisation on fait ceci :
UserQueries userQueries = QueryTool.getQuery(UserQueries.class);
Et on obtient un implémentation de l'interface UserQueries sans avoir taper le moindre code
a++
Partager