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

Silverlight Discussion :

Callback ou « le retour de la programmation spaghettis »


Sujet :

Silverlight

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éprouvé
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    876
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Novembre 2005
    Messages : 876
    Par défaut Callback ou « le retour de la programmation spaghettis »
    Bonjour,

    Un titre un petit peu provocateur, je le concède. Mais est-ce une réalité ou est-ce moi qui n’utilise pas correctement les callbacks ?

    Voici, sur base d’un exemple le problème et sa résolution spaghetti.

    Dans une application, j’ai des utilisateurs ASP (avec login et mot de passe) qui sont associés à des individus (Pierre, Paul ou Jacques). Chaque individu fait partie d’un Magasin.

    Il m’importe de connaitre le numéro ou le nom du magasin dans lequel travaille celui qui vient de se loguer.
    Après qu’il ait entré son mot de passe, je dois faire un premier callback qui me retrouve l’identifiant ASP en fonction du nom de l’utilisateur ASP.
    Dans CallBack_identifiantASP, je dois faire un second callback qui me retrouve l’identifiant de Pierre, Paul ou Jacques en fonction de l’association (foreign key) entre « individu » et utilisateur ASP.
    Ensuite, comme l’individu me donne aussi l’identifiant du magasin dans lequel il travaille, je n’ai plus qu’à faire un troisième callback qui va me retrouver par exemple le nom du magasin.
    L’inconvénient de ces callbacks successifs est que le code est disséminé dans l’un ou l’autre de ces callbacks plutôt que d’être structuré en un seul endroit.

    Il en va de même si je veux par exemple enregistrer 3 achats sur une carte de fidélité d’un client, je dois :
    Après sélection du client, callback pour voir s’il a déjà une carte de fidélité.

    Si NON (pas encore de carte), je dois la créer et refaire un callback pour connaitre l’identifiant de la nouvelle carte (j'ai souligné pour savoir si dans ce cas il n'existe aucun moyen de récupérer l'identifiant nouvellement créer sans faire un callback). Et enfin je peux mettre mes achats dessus.

    Si OUI(déjà une carte), je dois faire un callback pour savoir s’il n’est pas pleine..

    Merci d'avance pour vos commentaires.

  2. #2
    Rédacteur
    Avatar de Nathanael Marchand
    Homme Profil pro
    Expert .Net So@t
    Inscrit en
    Octobre 2008
    Messages
    3 615
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Expert .Net So@t
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2008
    Messages : 3 615
    Par défaut
    Pour le premier cas, pourquoi ne pas tout faire d'un coup dans le même appel au serveur?

    Dans le second cas, c'est plutôt la logique de l'appli à revoir.

    Edit: En relisant le post, t'es sur que c'est dans le forum Silverlight que tu veux poser ta question?

  3. #3
    Rédacteur
    Avatar de The_badger_man
    Profil pro
    Développeur .NET
    Inscrit en
    Janvier 2005
    Messages
    2 745
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Janvier 2005
    Messages : 2 745
    Par défaut
    Pour le 1er cas, comme le dit PitMaverick78, pour ne pas faire une seule fonction qui te ramène tous les éléments dont tu a besoin plutôt que 40 petites ?
    Genre un GetUserInfo() qui te renvoie un objet User avec les infos de la personne dessus ?

    Pour le deuxième cas, pourquoi fais-tu tous ses traitements métier coté Silverlight ?
    Tu crées simplement une fonction AchatClient(List<Produit> produits, int clientID) ou un truc dans le genre qui prend les produits à acheter et le numéro du client. L'histoire de la carte de fidélité se passe coté serveur.
    Les règles du forum
    Le trio magique : FAQ + Cours + fonction rechercher
    Mes articles
    Pas de questions par messages privés svp

    Software is never finished, only abandoned.

  4. #4
    Membre éprouvé
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    876
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Novembre 2005
    Messages : 876
    Par défaut
    Bonsoir,

    Merci pour ces deux réponses.

    Pour ce qui est du cas un, c'est évidemment ce que j'ai fini par faire, une vue qui reprend toutes les infos (du magasin au aspUser) et en un seul appel j'ai toutes les infos.

    Pour ce qui est de la question de savoir si ce post à bien sa place dans le forum silverlight, je pense que oui puisqu'il traite essentiellement de callback (et donc de l'asynchrone) qui est pour moi lié à silverlight.

    Pour ce qui est des cartes de fidélités, c'est effectivement plus judicieux de traiter ça coté serveur sauf que la seule chose que je suis capable de faire c'est (et c'est justement l'exemple de ma vue UserInfo):
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     Public Function GetUserInfoByAspName(ByVal parAspUserName As String) As IQueryable(Of vw_UserInfo)
            Dim list As IQueryable(Of vw_UserInfo) = From myUserInfo In Me.ObjectContext.vw_UserInfo _
            Where myUserInfo.UserName = parAspUserName
            Return list
        End Function
    C'est le genre de fonction que je lance coté client avec un :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     Dim ctx As New J_Context
                ctx.Load(ctx.GetUserInfoByAspNameQuery(myName), AddressOf callback_GetUserInfoByAspName, Nothing)
    J'ai donc l'impression qu'il me manque la possibilité de "lancer" une fonction à partir du client qui se déroulerait coté serveur et qui pourrait faire des insert, delete, update....

    Auriez-vous un exemple de comment procéder ?

  5. #5
    Rédacteur
    Avatar de Nathanael Marchand
    Homme Profil pro
    Expert .Net So@t
    Inscrit en
    Octobre 2008
    Messages
    3 615
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Expert .Net So@t
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2008
    Messages : 3 615
    Par défaut
    Je pensais que tu parlais de postback d'asp.net en fait

    Je supposes que tu utilises le framework RIA Services?
    Ta fonction GetUserInfoByAspName est normalement décorée d'un attribut Query ( doc ) mais tu peux aussi utiliser d'autre attribut comme Insert (doc) pour une fonction qui insère dans la base ou même Invoke (doc) qui effectue une fonction quelconque côté serveur.

    Cela dit, utiliser RIA Services c'est (d'après moi) déporter beaucoup de logique métier côté client puisque c'est essentiellement pour faire du CRUD des entités stockés en base.

  6. #6
    Membre éprouvé
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    876
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Novembre 2005
    Messages : 876
    Par défaut
    Effectivement, j'utilise RIA et je commence à me demander si c'est un bien. Quelles sont les alternatives ?, sachant que la plupart du temps, je fais des applications de gestion ou le CRUD est primordial et ou je dois demander des confirmations à l'utilisateur (du style "Etes-vous sûr de vouloir...")

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

Discussions similaires

  1. Récupérer la valeur de retour d'un programme
    Par <Zer0> dans le forum Ruby
    Réponses: 3
    Dernier message: 02/10/2007, 20h45
  2. verifier la valeur de retour d'un programme (dos)
    Par kamouminator dans le forum Windows XP
    Réponses: 3
    Dernier message: 18/07/2007, 08h57
  3. code retour d'un programme
    Par gaetanlcs dans le forum Langage
    Réponses: 1
    Dernier message: 17/04/2007, 15h33
  4. [Debutant(e)] Code de retour de mon programme
    Par benji999 dans le forum Général Java
    Réponses: 2
    Dernier message: 10/12/2004, 13h15
  5. [commande DOS] Récupérer le code retour d'un programme
    Par bobunny dans le forum Scripts/Batch
    Réponses: 8
    Dernier message: 04/06/2004, 15h51

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