-----Original Message-----
From: Stephane Galles [mailto:address@hidden
Sent: Tuesday, March 29, 2005 3:19 PM
To: tsp-devel
Subject: Re: [Tsp-devel] JTSP : le sessionId...
Hello,
content que cela te plaise !
En fait j'ai déjà fait un commit d'un début d'API "simple" n, avec un
Jstdout "simple".
Cela va évoluer en fonction des besoins et des modifications
que Eric va
faire à la
couche n-1. Pour l'instant j'ai masqué tout ce qui n'était pas stable
dans n-1.
Pour la Factory, l'unicité n'est pas un prérequis. S'il y a unicité,
c'est parceque ton
application a cette contrainte technique. Faire une factory c'est
simplement sortir
le code de création du constructeur d'un objet pour le mettre
ailleurs.
Lorsque je
parlais de Factory pour le TspConsumer c'était surtout pour dire qu'il
ne devait
s'occuper que de la création, mais pas de la destruction des
TspSession
(ou alors
on tombe dans autre chose, c'est plus un "Repository" ou un "Home" de
TspSession)
Il a beaucoup de cas ou tu cherche la multiplicité des factory.
Typiquemement dans le
cas des Abstract Factory, ou tu construit plusieurs types de factory,
qui vont construire
des objets de plusieurs types différents.
Ceci étant dit, dans mon premier email je n'avais pas soulevé le
problème de l'unicité,
mais effectivement cela mérite que l'on s'y intéresse
Eventuellement la question qui peut se poser c'est si le TspConsumer
reste instanciable,
ou s'il devient statique :
Au lieu de
TspConsumer tspConsumer = new TspConsumer();
TspSession mySession = tspConsumer.openSession(url);
On pourrait avoir :
TspSession mySession = TspConsumer.openSession(url);
(openSession est une fonction statique de TspConsumer)
De ce point de vue, la factory redevient unique effectivement. Mais
l'argument pour l'unicité est
qu'on ne veut appeler Initialize une seule fois
TspConsumer.initialize(args);
TspSession mySession = TspConsumer.openSession(url);
(openSession est une fonction statique de TspConsumer)
Néanmoins, je ne suis pas un grand fan des état statiques dans
les classes.
Dans l'API "simple", faute de mieux j'ai fais quelque chose comme :
TspConsumer tspConsumer = new TspConsumer(args);
TspSession mySession = tspConsumer.openSession(url);
(j'ai enlevé la fonction initialize, et j'utilise le constructeur de la
factory)
On verra à l'usage et en fonction de vos retours la dessus.
Steph
(et encore désolé pour le spam l'autre jour, j'ai envoyé 2 fois
l'email. Il va falloir que je pense à m'acheter des doigts)
Pour la factory, je ne pense pas
dvp.duf wrote:
A priori faire du TspConsumer une Factory implique de part
la théorie
des design patern (si je me rappelle bien...) qu'il soit unique ?
Je ne vois pas d'impossibilité pour le consumer dans cette
unicité, et
l'API que tu proposea a l'air plutot élégante et bien "object" style.
Y++
Stephane Galles wrote:
Bonjour, bonjour,
j'étais en train de commencer l'API niveau n pour JTSP,
mais il y a
un petit
détail qui m'est revenu concernant la notion de sessionId
actuellement utilisé par
l'API n-1 . Ma remarque est valable à la fois pour l'API
niveau n et
n-1, car il n'y
a pas de raisons de gérer cela différement.
Actuellement le cycle de vie d'une session est le suivant :
TspConsumer tspConsumer = new TspConsumer();
int sessionId = tspConsumer.openSession(url);
TspSession mySession = tspConsumer.getSession(sessionId);
[...]
tspConsumer.closeSession(sessionId);
Autremement dit, l'objet tspConsumer possède une Map
de toutes les sessions ouvertes, et on y accède par sessionId. Puis
quand on veut fermer une session, on s'adresse à monsieur le
TspConsumer
Je trouve cela un peu "forcé". D'une part parceque on est dans un
langage objet, et qu'on a pas besoin d'un objet TspConsumer pour
gérer la destruction de la session, et d'autre part, proposer un
sessionId
comme handle ne fait que déplacer le problème, car il va
bien falloir
que je mette ces sessionId dans une Map ou liste à moi, pour savoir
ce qu'ils signifie. Autrement dit, je préfèrerait que l'objet
TspConsumer
ne soit qu'une factory et me laisser gérer mes listes de sessionId
Je vous propose donc la chose suivante :
TspConsumer tspConsumer = new TspConsumer();
TspSession mySession = tspConsumer.openSession(url);
[...]
mySession.close();
La plupart des API objet fonctionnent comme cela. La création
n'est pas de la responsabilité d'un objet, mais sa
destruction l'est.
Exemple classique des drivers JDBC java :
L'objet Connection se détruit tout seul :
http://java.sun.com/j2se/1.4.2/docs/api/java/sql/Connection.htm
l#close()
Mais la création est faite par :
http://java.sun.com/j2se/1.4.2/docs/api/java/sql/DriverManager.html#getConne
ction(java.lang.String,%20java.util.Properties)
En tout cas, pour tester, je tenter l'API "simple" de cette maniere,
on verra
si on le garde ou pas en fonction de ce que cela donne.
_______________________________________________
Tsp-devel mailing list
address@hidden
http://lists.nongnu.org/mailman/listinfo/tsp-devel
_______________________________________________
Tsp-devel mailing list
address@hidden
http://lists.nongnu.org/mailman/listinfo/tsp-devel
_______________________________________________
Tsp-devel mailing list
address@hidden
http://lists.nongnu.org/mailman/listinfo/tsp-devel
------------------------------------------------------------------------
---------------------------------------------------------
CE COURRIER ELECTRONIQUE EST A USAGE STRICTEMENT INFORMATIF ET NE SAURAIT
ENGAGER DE QUELQUE MANIERE QUE CE SOIT EADS ASTRIUM SAS, NI SES FILIALES.
SI UNE ERREUR DE TRANSMISSION OU UNE ADRESSE ERRONEE A MAL DIRIGE CE COURRIER,
MERCI D'EN INFORMER L'EXPEDITEUR EN LUI FAISANT UNE REPONSE PAR COURRIER
ELECTRONIQUE DES RECEPTION. SI VOUS N'ETES PAS LE DESTINATAIRE DE CE COURRIER,
VOUS NE DEVEZ PAS L'UTILISER, LE CONSERVER, EN FAIRE ETAT, LE DISTRIBUER, LE
COPIER, L'IMPRIMER OU EN REVELER LE CONTENU A UNE TIERCE PARTIE.
This email is for information only and will not bind EADS Astrium SAS in any
contract or obligation, nor its subsidiaries.
If you have received it in error, please notify the sender by return email. If
you are not the addressee of this email, you must not use, keep, disseminate,
copy, print or otherwise deal with it.
---------------------------------------------------------