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

JavaScript Discussion :

POO - Comment bien faire un setter et getter


Sujet :

JavaScript

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé Avatar de tidus_6_9_2
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    200
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Janvier 2008
    Messages : 200
    Par défaut POO - Comment bien faire un setter et getter
    Bonjour à toutes et à tous,

    Voilà, je me dis que je dois me mettre à la POO pour des questions de connaissances, maintenances et de vitesse (selon mon code )

    J'ai donc fait un petit exemple avec une class Client comme suit :

    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
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
     
    function Client(){
    	var vID,vPolitesse,vActif,vName,vFirstName,vSociete,vType,vTelPrive,vTelPro,vTelMob,vFax,vMail,vIDRue,vRue,vCP,vLocalite,vPays,vCommentaire,vContacts;
     
    	this.setClientInfos = function(vID,vPolitesse,vActif,vName,vFirstName,vSociete,vType,vTelPrive,vTelPro,vTelMob,vFax,vMail,vIDRue,vRue,vCP,vLocalite,vPays,vCommentaire,vContacts){
    		this.vID = vID;
    		this.vPolitesse = vPolitesse;
    		this.vActif = vActif;
    		this.vName = vName;
    		this.vFirstName = vFirstName;
    		this.vSociete = vSociete;
    		this.vType = vType;
    		this.vTelPrive = vTelPrive;
    		this.vTelPro = vTelPro;
    		this.vTelMob = vTelMob;
    		this.vFax = vFax;
    		this.vMail = vMail;
    		this.vIDRue = vIDRue;
    		this.vRue = vRue;
    		this.vCP = vCP;
    		this.vLocalite = vLocalite;
    		this.vPays = vPays;
    		this.vCommentaire = vCommentaire;
    		this.vContacts = vContacts;
    	}
     
    	this.getClientInfos = function(){
    		return	{"client":[
    					{
    						"id":vID,
    						"politesse":vPolitesse,
    						"actif":vActif,
    						"nom":vName,
    						"prenom":vFirstName,
    						"societe":vSociete,
    						"type":vType,
    						"telprive":vTelPrive,
    						"telpro":vTelPro,
    						"telmob":vTelMob,
    						"fax":vFax,
    						"mail":vMail,
    						"idrue":vIDRue,
    						"Rue":vRue,
    						"cp":vCP,
    						"localite":vLocalite,
    						"pays":vPays,
    						"commentaire":vCommentaire,
    						"contacts":vContacts
    					}
    				]};
    	}
     
    }
    Comme j'ai encore un peu de peine, j'aurais voulus savoir une chose.

    J'ai donc mon getter qui s'occupe de récupérer les variables locales à la class et qui me les renvoient en JSON. Comment dois-je procéder au mieux pour récupérer ce JSON ?

    Dois-je faire la requête vers ma BDD dans le getter ou faudrait-il plutôt faire une autre méthode qui s'occupe des requêtes pour ensuite setter les valeurs?

    Cela peut paraitre bête peut-être... Mais je ne vois pas qu'es ce qui serait le plus efficace avec une BDD qui tourne derrière...


    Merci d'avance pour vos lumières

    [EDIT]
    Désolé j'ai oublié de préciser. Ma question s'applique aussi au setter. Es-ce qu'il vaut mieux travailler avec les variables de la class pour, par la suite, enregistrer dans la BDD ou vaut-il mieux que je set directement les valeurs dans ma BDD ?

  2. #2
    Expert confirmé
    Avatar de sekaijin
    Homme Profil pro
    Urbaniste
    Inscrit en
    Juillet 2004
    Messages
    4 205
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Urbaniste
    Secteur : Santé

    Informations forums :
    Inscription : Juillet 2004
    Messages : 4 205
    Par défaut
    je ne sais pas trop ce que tu veux faire mais ta méthode getClientInfo ne retourne pas le json de ton objet
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    var client = new Client();
    client. setClientInfos(...);
    //get JSON for client
    var txt = JSON.stringify(client);
    je crois qu'il te faut lire la doc sur JSON car pour affecter le contenu d'un JSON à un objet il suffit de faire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    var client2 = JSON.parse(txt);
    pour ce qui est de la base de donnée il va te faloir être plus précise
    s'agit-il d'un datastore HTML5 côté client ou un e base relationnelle côté serveur ?

    A+JYT

  3. #3
    Membre confirmé Avatar de tidus_6_9_2
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    200
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Janvier 2008
    Messages : 200
    Par défaut
    Bonjour,


    Tout d'abord merci de la réponse . Pour ce qui est du code, je n'ai pas encore pris le temps de le corriger pardon , je me posais surtout la question et voulait me clarifier dans ma tête avant d'avancer.

    Pour ce qui est des requêtes, il s'agit d'un serveur MySQL par exemple. Enfin une BDD relationnelle serveur.

    Un ami à moi m'a indiqué une chose. Normalement un getter et un setter ne doivent jamais faire de requête directement. Cela devrait-être la fonction d'autres méthodes.

    Es-ce correcte ?

    D'après la documentation que j'ai pus trouver, j'ai vus certaines personnes faire des requêtes directement dans le setter et getter et d'autres qui séparaient les requêtes en méthodes. Donc je peine à savoir la meilleure solution en terme de développement

    [EDIT]
    Merci pour la fonction JSON au faite Je ne la connaissait pas vais lire la docs de ce pas

  4. #4
    Expert confirmé
    Avatar de sekaijin
    Homme Profil pro
    Urbaniste
    Inscrit en
    Juillet 2004
    Messages
    4 205
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Urbaniste
    Secteur : Santé

    Informations forums :
    Inscription : Juillet 2004
    Messages : 4 205
    Par défaut
    je ne comprend rien

    ton javascript s’exécute sur le serveur ?
    Car dans ce cas je ne vois pas ce que vient faire JSON dans l'affaire

    et si ton javascript s’exécute sur le client il n'a pas accès à la base mais au serveur http il n'a pas à faire de requêtes sur la base c'est au serveur de s'en charger.

    A+JYT

  5. #5
    Membre confirmé Avatar de tidus_6_9_2
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    200
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Janvier 2008
    Messages : 200
    Par défaut
    Non je penses qu'il y a un malentendu.

    J'ai du javascript exécuté sur un poste client. J'utilise du PHP, MySQL et du javascript par exemple. Donc javascript exécuté côté client.

    Du coup, il peut m'arriver d'avoir à faire des requêtes asynchrone (AJAX) vers la BDD MySQL.

    Donc du coup, lorsque je code en javascript pour faire une class, j'aimerais savoir si je doit faire un setter dans lequel je met ma requête ajax ou si je dois faire une autre méthode que j'appel pour effectuer la requête.

    Un exemple sera plus parlant peut-être...

    Vaut-il mieux faire :
    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
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
     
    function Client(){
    	var vID,vPolitesse,vActif,vName,vFirstName,vSociete,vType,vTelPrive,vTelPro,vTelMob,vFax,vMail,vIDRue,vRue,vCP,vLocalite,vPays,vCommentaire,vContacts;
     
    	this.setClientInfos = function(vID,vPolitesse,vActif,vName,vFirstName,vSociete,vType,vTelPrive,vTelPro,vTelMob,vFax,vMail,vIDRue,vRue,vCP,vLocalite,vPays,vCommentaire,vContacts){
    		this.vID = vID;
    		this.vPolitesse = vPolitesse;
    		this.vActif = vActif;
    		this.vName = vName;
    		this.vFirstName = vFirstName;
    		this.vSociete = vSociete;
    		this.vType = vType;
    		this.vTelPrive = vTelPrive;
    		this.vTelPro = vTelPro;
    		this.vTelMob = vTelMob;
    		this.vFax = vFax;
    		this.vMail = vMail;
    		this.vIDRue = vIDRue;
    		this.vRue = vRue;
    		this.vCP = vCP;
    		this.vLocalite = vLocalite;
    		this.vPays = vPays;
    		this.vCommentaire = vCommentaire;
    		this.vContacts = vContacts;
    	}
     
    	this.getClientInfos = function(){
    		return	{"client":[
    					{
    						"id":vID,
    						"politesse":vPolitesse,
    						"actif":vActif,
    						"nom":vName,
    						"prenom":vFirstName,
    						"societe":vSociete,
    						"type":vType,
    						"telprive":vTelPrive,
    						"telpro":vTelPro,
    						"telmob":vTelMob,
    						"fax":vFax,
    						"mail":vMail,
    						"idrue":vIDRue,
    						"Rue":vRue,
    						"cp":vCP,
    						"localite":vLocalite,
    						"pays":vPays,
    						"commentaire":vCommentaire,
    						"contacts":vContacts
    					}
    				]};
    	}
     
    this.RequeteGetClient = function(){
    //Requête qui récupère les informations du client pour que je puisse ensuite faire un setClientInfos(.....);
    }
     
    this.RequeteSetClient = function(){
    //Requête qui vas envoyer les informations du client pour les enregistrer
    }
     
    }
    Ou ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    function Client(){
    	var vID,vPolitesse,vActif,vName,vFirstName,vSociete,vType,vTelPrive,vTelPro,vTelMob,vFax,vMail,vIDRue,vRue,vCP,vLocalite,vPays,vCommentaire,vContacts;
     
    this.setClientInfos = function(){
    //Requête qui vas envoyer les informations du client pour les enregistrer
    }
     
    this.getClientInfos= function(){
    //Requête qui récupère les informations du client pour que je puisse ensuite faire un setClientInfos(.....);
    }
     
    }
    Donc je n'ai pas de question sur JSON ni sur comment faire les requêtes AJAX. Je veux juste savoir qu'es ce qui est le plus propre à faire entre les deux exemples.

  6. #6
    Expert confirmé
    Avatar de Watilin
    Homme Profil pro
    En recherche d'emploi
    Inscrit en
    Juin 2010
    Messages
    3 094
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : En recherche d'emploi

    Informations forums :
    Inscription : Juin 2010
    Messages : 3 094
    Par défaut
    Moi je pense deux choses. Ouaip, ça arrive des fois.

    1. Si tu veux faire de la POO propre, quitte JavaScript. Mets-toi à Python, C++, Java ou que sais-je, mais la philosophie de JavaScript, ce n'est pas de la POO - du moins, pas au sens classique.

    2. Ta méthode setClientInfos a beaucoup trop de paramètres ! Tu devrais plutôt offrir un setter par propriété. Ou alors, utilise une map, ça rend les paramètres facultatifs et permet à l'utilisateur de les passer dans n'importe quel ordre :
    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
    this.setClientInfos = function( map ){
    		map = map || {};
    		// si rien n'a été passé en paramètre, on a map === undefined,
    		// donc l'opérateur || choisit l'opérande de droite, {}
    		// c'est-à-dire une map vide
     
    		this.vID = map.vID;	// si pas de vID dans la map, on aura undefined
    					// c'est au moment de l'utilisation qu'il faut tester si la propriété est bien définie
    		this.vPolitesse = map.vPolitesse;
    		this.vActif = map.vActif;
    		this.vName = map.vName;
    		this.vFirstName = map.vFirstName;
    		this.vSociete = map.vSociete;
    		this.vType = map.vType;
    		this.vTelPrive = map.vTelPrive;
    		this.vTelPro = map.vTelPro;
    		this.vTelMob = map.vTelMob;
    		this.vFax = map.vFax;
    		this.vMail = map.vMail;
    		this.vIDRue = map.vIDRue;
    		this.vRue = map.vRue;
    		this.vCP = map.vCP;
    		this.vLocalite = map.vLocalite;
    		this.vPays = map.vPays;
    		this.vCommentaire = map.vCommentaire;
    		this.vContacts = map.vContacts;
    	}
    Sinon pour ta dernière question, je penche pour la première solution. C'est une sorte de système de commit, tu modifies en volatile puis quand tu es prêt, tu rends les modifications permanentes. Ça me paraît plus robuste… Mais je n'ai pas d'arguments pour appuyer mon opinion. Juste une chose à prendre en compte : quand on nomme une méthode « setQuelqueChose », on s'attend à ce qu'elle ait un effet immédiat quand on l'appelle. Or avec Ajax, même synchrone (horreur !), il y aura une latence. Donc une méthode qui s'appelle « RequeteQuelqueChose » ça raconte un peu mieux ce qu'elle fait. Je trouve.


    Oh, encore une chose. Je ne sais pas si tu vas tomber dans le piège, mais je te le dis tout de suite : JavaScript ne doit pas assurer la sécurité de l'application. Si tu fais des vérifications côté client, il faut les faire aussi côté serveur.
    La FAQ JavaScript – Les cours JavaScript
    Touche F12 = la console → l’outil indispensable pour développer en JavaScript !

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [Debutant] comment bien faire une variable ?
    Par nighthammer dans le forum iReport
    Réponses: 2
    Dernier message: 27/05/2008, 11h56
  2. comment bien faire organiser ses header
    Par DEVfan dans le forum C++
    Réponses: 43
    Dernier message: 29/04/2008, 11h58
  3. Class de mesh, comment bien faire ?
    Par Tosh dans le forum Développement 2D, 3D et Jeux
    Réponses: 8
    Dernier message: 24/04/2007, 12h24
  4. [MS/SQL 2K][Securité][Restauration]Comment bien faire ?
    Par jbat dans le forum MS SQL Server
    Réponses: 3
    Dernier message: 18/04/2007, 11h18
  5. POO : comment bien sous-classer ?
    Par Invité1 dans le forum Langages de programmation
    Réponses: 3
    Dernier message: 05/04/2005, 12h20

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