IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

ASP Discussion :

Création d'un Singleton


Sujet :

ASP

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Août 2007
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 5
    Par défaut Création d'un Singleton
    Bonjour,

    Je développe actuellement sur un site en ASP, et je me sers de plusieurs classes pour centraliser mon code.
    Seulement j'aimerais savoir si il est possible de créer un Singleton en ASP?
    ou si il existe une astuce pour "simuler" ce singleton, et donc rappeler toujours la même instance de mon objet?

    J'ai trouvé beaucoup d'exemple en .NET, C#, mais personne n'a l'air de se servir de ca en ASP

    Si vous avez une idée, elle serait la bienvenue

    Merci d'avance

  2. #2
    Modérateur
    Avatar de roro06
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    1 480
    Détails du profil
    Informations personnelles :
    Âge : 56
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 1 480
    Par défaut
    Bonjour

    Au risque de dire une C......rie, car je ne sais pas trop ce qu'est un singleton, il est possible d'instancier un objet de type COM de manière unique en indiquant dans le fichier global.asa :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    <object
        runat="server"
        scope="Application"
        id="statCP"
        progid="statslogInput.WSC">
    </object>
    
    
    (statCP et statslogInput.WSC étant fonction de l'objet considéré)

    Il est possible aussi d'utiliser scope="Session" pour créer une instance par session utilisateur.

    l'objet (ou le composant script dans mon cas) doit être enregistré en base de registre.

    J'espère que ça peut t'aider .


    N'oubliez pas de consulter les FAQ ASP et les cours et tutoriels ASP

    " La vie c'est quelque chose de très fort et de très beau.... La vie appartient a tous les vivants. It's both a dream and a feeling. C'est être ce que nous ne sommes pas sans le rester. La vie c'est mourir aussi....Et mourir c'est vraiment strong...c'est rester en vie au delà de la mort...Tous ceux qui sont morts n'ignorent pas de le savoir."
    (J.C. VanDamme, humoriste et philosophe belge . A moins que ce ne soit l'inverse ...)

    Chuck Norris comprend JC Van Damme.

  3. #3
    Futur Membre du Club
    Profil pro
    Inscrit en
    Août 2007
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 5
    Par défaut
    Merci Roro pour ta réponse rapide

    En fait ce que je cherche à faire, c'est créer une classe en ASP
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
     
    <%
    Class maClasse
     
    	private mesinfos
     
    		Private Sub Class_Initialize()
     
    		  End Sub
     
    		  Private Sub Class_Terminate()
     
    		  End Sub
     
    End Class
     
    Set classe = New maClasse
    Set classe = Nothing
     
    %>
    Et au lieu d'appeler maclasse en faisant un New, j'appele l'instance de l'objet en cours.
    Ce qui a pour résultat, de me creer un objet si il n'existe pas, de me ramener les attributs et les valeurs qui y sont associés si l'objet existe.


    Je ne comprends pas trop ce qu'est un objet de type COM ?
    N'y a t'il pas un moyen de le faire sans toucher a la config du serveur?
    Pt etre en appelant une fonction par référence?

  4. #4
    Modérateur
    Avatar de roro06
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    1 480
    Détails du profil
    Informations personnelles :
    Âge : 56
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 1 480
    Par défaut
    Je cains que ce que tu veut faire ne soit pas possible en ASP (d'ailleurs, si c'était possible, je serait vivement interressé )

    La méthode que je t'ai donné nécessite effectivement d'intervenir sur le serveur.

    Je ne saurais pas précisément expliquer ce qu'est un objet COM, d'autres sauront sûrement le faire mieux que moi.


    N'oubliez pas de consulter les FAQ ASP et les cours et tutoriels ASP

    " La vie c'est quelque chose de très fort et de très beau.... La vie appartient a tous les vivants. It's both a dream and a feeling. C'est être ce que nous ne sommes pas sans le rester. La vie c'est mourir aussi....Et mourir c'est vraiment strong...c'est rester en vie au delà de la mort...Tous ceux qui sont morts n'ignorent pas de le savoir."
    (J.C. VanDamme, humoriste et philosophe belge . A moins que ce ne soit l'inverse ...)

    Chuck Norris comprend JC Van Damme.

  5. #5
    Futur Membre du Club
    Profil pro
    Inscrit en
    Août 2007
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 5
    Par défaut
    j'ai trouvé ceci, je sais pas ce que t'en pense

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
     
    <% 
     
    Dim la_classe
    Set la_classe = Nothing 
     
    Function getinstance
        If la_classe Is Nothing Then 
            Set la_classe = New maclasse
        End If 
        Set getinstance = la_classe 
    End Function 
     
    class maclasse
     
       private blabla
     
       function .....
       .....
     
    end class
     
    'pour appeler l'instance en cours ou en creer une 
     
    la_classe = getinstance()
     
    %>
    Si vous avez d'autres exemples, je reste preneur :p

  6. #6
    Modérateur
    Avatar de roro06
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    1 480
    Détails du profil
    Informations personnelles :
    Âge : 56
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 1 480
    Par défaut
    bonjour

    Ca va pas changer grand chose : le probleme, c'est que ton instance déclarée comme cela aura la même durée de vie que la page dans laquelle elle est appelée. Si tu va sur une autre page, cette instance n'existera plus. Ton test est donc inutile, il suffit de faire en début de page :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Set la_classe = New maclasse
    et c'est joué
    Or, si j'ai bien compris ton besoin, tu veux une instance de ta classe qui dure tout le temps de l'Application (la durée de vie de l'Application part à partir du tout premier appel d'une page du site jusqu'a l'arret du serveur).


    Pour une variable de type texte, pas de probleme : il suffit de déclarer une variable d'Application (ça porte bien son nom, hein ?) de la manière suivante :

    Application ("maVariable") = "monContenu"

    Pour une instance de classe ... ça passe pas. vbScript n'est pas un langage orienté Objet.

    (Au passage, et si ce n'est pas trop tard, si tu doit faire un site ASP "orienté objet", je te conseille de plutot utiliser Jscript. Ca ne résoudra rien, mais le langage est tellement plus riche et plus souple ...) . Tout l'interet de .net (sur lequel je ne pourrais pas t'aider ! ) est là.

    (Entre nous, il aurait suffit que Microsoft veuille bien rajouter à son objet Application cette possibilité, on aurait gagné beaucoup)


    N'oubliez pas de consulter les FAQ ASP et les cours et tutoriels ASP

    " La vie c'est quelque chose de très fort et de très beau.... La vie appartient a tous les vivants. It's both a dream and a feeling. C'est être ce que nous ne sommes pas sans le rester. La vie c'est mourir aussi....Et mourir c'est vraiment strong...c'est rester en vie au delà de la mort...Tous ceux qui sont morts n'ignorent pas de le savoir."
    (J.C. VanDamme, humoriste et philosophe belge . A moins que ce ne soit l'inverse ...)

    Chuck Norris comprend JC Van Damme.

  7. #7
    Membre expérimenté Avatar de Cpas2latarte
    Inscrit en
    Janvier 2006
    Messages
    237
    Détails du profil
    Informations forums :
    Inscription : Janvier 2006
    Messages : 237
    Par défaut
    Grosso modo Il est demandé de "stocker" une instance d'un objet VBS dans toute la durée d'une application -> stoké dans la vériable d'application.

    J'ai fait un fonctionnement de ce type, j'ai rencontré les mêmes limitation.
    J'ai contourné le problème en simulant une sérialisation de mon objet.
    Je m'explique :
    plutôt que de faire un
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Set Application("...) = monobjet
    J'ai ajouté 2 méthodes a mon objets
    la premiere recupérait l'ensemble des propriétés de mon objet, et retourné une chaine du type propriété=valeur
    quelque chose du genre
    propriete1=valeur1&propriete2=valeur2&.....&proprieten=valeurn

    La seconde méthode à partir d'une chaine de ce type, rensignait les propriété adéquate de la class.

    du coup quand je voulais sauvegarder mon objet, je sauvegardait en fait une chaine correspondant au contexte de mon objet.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Application("...") = monObjet.serialise()
    et je récupérais mon objet de la sorte :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    Set monObjet = new MaClass
    call monObjet.unserialise(Application("..."))
    dans le cadre de l'utilisation que j'en faisait, ça marchait plutôt bien. Juste 2 inconvénient :
    - quand on modifie la CLass (ajout, suppression de propriété) il faut penser à modifier les 2 méthodes
    - je ne stockait que des variant (pas de references sur des objet de type activex par example)

    J'espere que ça peut t'aider

  8. #8
    Modérateur
    Avatar de roro06
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    1 480
    Détails du profil
    Informations personnelles :
    Âge : 56
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 1 480
    Par défaut
    Pas con du tout, comme idée ... C'est peut-être LA solution à adopter


    N'oubliez pas de consulter les FAQ ASP et les cours et tutoriels ASP

    " La vie c'est quelque chose de très fort et de très beau.... La vie appartient a tous les vivants. It's both a dream and a feeling. C'est être ce que nous ne sommes pas sans le rester. La vie c'est mourir aussi....Et mourir c'est vraiment strong...c'est rester en vie au delà de la mort...Tous ceux qui sont morts n'ignorent pas de le savoir."
    (J.C. VanDamme, humoriste et philosophe belge . A moins que ce ne soit l'inverse ...)

    Chuck Norris comprend JC Van Damme.

  9. #9
    Futur Membre du Club
    Profil pro
    Inscrit en
    Août 2007
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 5
    Par défaut
    Merci beaucoup à vous 2 pour les explications

    Tout d'abord, pour le moment, je pense que je n'aurais pas besoin de stocker durant toute la durée de l'application, mais uniquement lors de l'execution du script.

    Ceci dans le but de ne pas avoir a recreer un objet à chaque fois que j'utilise une fonction, ou bien même de lui transmettre en paramètre à chaque fois.
    Pour le moment donc, mon histoire avec la fonction getinstance() fonctionne bien.

    Par contre l'interet de stocker un objet durant toute l'application me parait un petit peu bizzarre.. je ne vois pas trop l'interet, a part si vous n'avez pas de BDD derrière.

    Sinon l'idée de serialiser est pas mal , mais tu utilises un séparateur pour serialiser, et si tu as une variable dans ton objet de type texte, ca peut etre dangereux.
    De meme qu'avec une serialisation, tu ne fais que stocker les attributs de ton objets, et non pas les méthodes, ce qui revient a utiliser les variables de session je pense...

    En tout cas merci à vous

  10. #10
    Membre expérimenté Avatar de Cpas2latarte
    Inscrit en
    Janvier 2006
    Messages
    237
    Détails du profil
    Informations forums :
    Inscription : Janvier 2006
    Messages : 237
    Par défaut
    Citation Envoyé par freneticc Voir le message
    mais tu utilises un séparateur pour serialiser, et si tu as une variable dans ton objet de type texte, ca peut etre dangereux.
    Dans la méthode de sérialisation j'avais prévus un principe d'échappement. En l'occurrence, je ne m'étais pas trop embêté, j'avais utilisé le même format que dans un fichier CSV (pourquoi réinventer la roue ...)
    ex valeur1="toto";
    et si ma chaine contenait 1 guillemet, je le doublais.
    Ce qui m'avais poser le plus de problème c'était la désérialisation.

    Citation Envoyé par freneticc Voir le message
    De meme qu'avec une serialisation, tu ne fais que stocker les attributs de ton
    C'est exactement le but d'une sérialisation : stoker le contexte (la valeurs des propriétés) et non l'objet lui même.
    l'avantage de la sérialisation c'est qu'on peut l'utiliser dans de nombraux cas (sauvegarde dans un fichier, transfert vias socket etc...)

    Mais il est vrais qu'on s'égare du sujet "SINGLETON"
    Je ne sais pas ce que c'est qu'un SINGLETON, j'ai regarde sur wikipedia.
    D'après ce que j'en ai compris, a ma connaisance tu n'a pas cela en ASP, en revanche, un fonctionnement de type SINGLETON entièrement gérer par le sytème peut être utilisé

    Cela nécéssite de déporter toute la logique métier dans des dll active x.
    Ces dll doivent être développé en l'implémentant une interface (je ne sais plus le nom ) qui permet la prise en charge de la DLL via le service window MSMQ.
    lorceque tu install la (les) DLL et que tu la (les) paramètre(s) dans le service de composant de windows, le sytem "le prend en charge"
    a chaque fois que tu fait un createobject dans asp -> le système vérifie si il existe une instance de l'objet en mémoire, si oui, il sauvegarde le contexte de l'objet, et a allou un nouveau contexte qu'i n'est accessible que pour celui quie a fait le CreateObject.
    C'est complètement transparent pour le développeurs web et ça permet une bien meilleur monte en charge du serveur et une économies des ressource du serveur.
    Est ce que ça correspond a ce qui est demandé ?

  11. #11
    Futur Membre du Club
    Profil pro
    Inscrit en
    Août 2007
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 5
    Par défaut


    Oui ca m'a l'air d'etre exactement ca qu'il doit falloir faire...déporter l'objet dans des dll active x.. Maintenant je sais pas si j'aurai l'occasion et le temps de le faire
    si j'y arrive, j'hésiterai pas a repasser pour vous tenir au courant

Discussions similaires

  1. Création d'une classe singleton
    Par ali.ensi dans le forum Débuter
    Réponses: 10
    Dernier message: 22/08/2009, 15h23
  2. Réponses: 7
    Dernier message: 03/04/2007, 16h30
  3. [Kylix] Création d'un fichier lien
    Par DrQ dans le forum EDI
    Réponses: 2
    Dernier message: 14/05/2002, 21h30
  4. Création image BMP
    Par Anonymous dans le forum C
    Réponses: 2
    Dernier message: 25/04/2002, 16h04

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo