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.NET Discussion :

Architecture 3 tiers et contrainte d'unicite


Sujet :

ASP.NET

  1. #1
    Membre confirmé
    Inscrit en
    Octobre 2005
    Messages
    194
    Détails du profil
    Informations forums :
    Inscription : Octobre 2005
    Messages : 194
    Par défaut Architecture 3 tiers et contrainte d'unicite
    Bonjour;
    Je travaille en architecture 3 tiers, et dans mes tables j'ai des champs qui doivent être unique, je voudrais savoir dans quelle couche je dois vérifier cette unicité.
    si vous me donner d'autres conseils, c'est encore mieux.

    Merci beaucoup.

  2. #2
    Membre Expert Avatar de Mose
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    1 143
    Détails du profil
    Informations personnelles :
    Âge : 48
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 1 143
    Par défaut
    Ca dépend.
    * Si toutes ta table est chargée dans ta couche interface (pas de pagination), tu peux faire une validation client pour éviter un A/R serveur, mais il te restera un cas d'erreur (deux utilisateurs différents)
    * Si toutes ta table est chargées dans ta couche métier, tu peux vérifier au niveau métier, si tes données sont en static (elles seront communes à tous les utilisateurs)
    * Sinon, le mieux à mon avis, en faisant proprement ta requête/store proc d'insertion, tu lui fais remonter un code d'erreur si on tente d'insérer un doublon.

    Sinon, la méthode crado utilisée dans 95% des cas, mais qui diminue les perfs de ton serveur, ça consiste à faire l'insertion et à gérer l'exception remontée par ton SGBD.

    Un autre conseil ?
    Brosse toi les dents tous les soirs avant d'aller te coucher

  3. #3
    Membre confirmé Avatar de stephane.net
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    170
    Détails du profil
    Informations personnelles :
    Âge : 48
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 170
    Par défaut
    Le DataSet Typé permet de gérer cette contrainte avant d'accéder au server SQL et dans ce cas, selon l'utilisation que tu fais de ton DataSet se sera soit dans la couche métier soit dans la couche d'accès aux données

  4. #4
    Membre Expert Avatar de Mose
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    1 143
    Détails du profil
    Informations personnelles :
    Âge : 48
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 1 143
    Par défaut
    Citation Envoyé par stephane.net
    Le DataSet Typé permet de gérer cette contrainte avant d'accéder au server SQL et dans ce cas, selon l'utilisation que tu fais de ton DataSet se sera soit dans la couche métier soit dans la couche d'accès aux données
    On parle bien d'un application web ?

  5. #5
    Membre confirmé Avatar de stephane.net
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    170
    Détails du profil
    Informations personnelles :
    Âge : 48
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 170
    Par défaut
    concernant ma réponse Oui ?

  6. #6
    Membre Expert Avatar de Mose
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    1 143
    Détails du profil
    Informations personnelles :
    Âge : 48
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 1 143
    Par défaut
    Scénario à la con :
    => on veut assurer l'unicité sur un nom de login dans une page de gestion des utilisateurs.
    T0 - L'utilisateur A se connecte et charge la page des utilisateurs.
    T1 - L'utilisateur B se connecte et charge la page des utilisateurs.
    T2 - L'utilisateur A entre le login "Robert", il valide, ça l'insère en base.
    T3 - L'utilisateur B (qui n'a pas rechargé la page des utilisateurs) entre le login "Robert" et valide.
    Comment ton DataSet il peut savoir que "Robert" n'existe pas en base sans se connecter ?

    Désolé de casser ta réponse précédente, mais soit j'ai pas compris, soit tu t'es mal exprimé (c'est un peu pareil), soit tu as dit une connerie

  7. #7
    Membre confirmé Avatar de stephane.net
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    170
    Détails du profil
    Informations personnelles :
    Âge : 48
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 170
    Par défaut
    merci Mose pour ta réponse

    mais c'est comme tu l'as dis : "ça dépend"

  8. #8
    Expert confirmé
    Avatar de Ditch
    Inscrit en
    Mars 2003
    Messages
    4 160
    Détails du profil
    Informations personnelles :
    Âge : 43

    Informations forums :
    Inscription : Mars 2003
    Messages : 4 160
    Par défaut
    Pas d'accord là dessus Si l'objet est stocké en tant que variable d'application, le problème ne se pose pas ici. Effectivement, à l'ajout dans le DataSet, ca va gueuler

    Donc pas de souci de ce côté là

  9. #9
    Membre confirmé Avatar de stephane.net
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    170
    Détails du profil
    Informations personnelles :
    Âge : 48
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 170
    Par défaut
    Bonjour Ditch,

    Citation Envoyé par Ditch
    Pas d'accord là dessus Si l'objet est stocké en tant que variable d'application
    Tu peux expliquer ce que ça signifie stp ?

  10. #10
    Expert confirmé
    Avatar de Ditch
    Inscrit en
    Mars 2003
    Messages
    4 160
    Détails du profil
    Informations personnelles :
    Âge : 43

    Informations forums :
    Inscription : Mars 2003
    Messages : 4 160
    Par défaut
    Qu'y a-t-il de compliqué? Si la c'est une variable d'application c'est ok... Je saurais pas dire autrement

    Tu as des variables à plusieurs niveaux:
    - Application (accessible à tous)
    - Session (accessible à l'utilisateur en cours)
    - Page (uniquement dans la page)
    - ...

    je vais m'arrêter là ce qui nous intéresse c'est celle qui est partagée par tous, en Application.

  11. #11
    Membre Expert Avatar de Mose
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    1 143
    Détails du profil
    Informations personnelles :
    Âge : 48
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 1 143
    Par défaut
    Citation Envoyé par Ditch
    Pas d'accord là dessus Si l'objet est stocké en tant que variable d'application, le problème ne se pose pas ici. Effectivement, à l'ajout dans le DataSet, ca va gueuler

    Donc pas de souci de ce côté là
    Ouais mais ça dépend comment l'appli est codée.
    Si l'insertion ne peut se faire QUE par un point d'entrée unique ou par ledit DataSet, alors oui, c'est cool.
    Mais pour peut que ce soit mal codé, qu'il y ait une procéduree automatique d'insertion, etc... ça peut être le dawa.

    Bref, On est d'accord au final : ça dépend

  12. #12
    Expert confirmé
    Avatar de Ditch
    Inscrit en
    Mars 2003
    Messages
    4 160
    Détails du profil
    Informations personnelles :
    Âge : 43

    Informations forums :
    Inscription : Mars 2003
    Messages : 4 160
    Par défaut
    Citation Envoyé par Mose
    Ouais mais ça dépend comment l'appli est codée.
    Si l'insertion ne peut se faire QUE par un point d'entrée unique ou par ledit DataSet, alors oui, c'est cool.
    Mais pour peut que ce soit mal codé, qu'il y ait une procéduree automatique d'insertion, etc... ça peut être le dawa.

    Bref, On est d'accord au final : ça dépend
    Désolé je ne fais que coder correctement

  13. #13
    Membre Expert Avatar de Mose
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    1 143
    Détails du profil
    Informations personnelles :
    Âge : 48
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 1 143
    Par défaut
    Nulle intention de te vexer Ditch.
    C'est juste qu'à force de faire du consulting sur des applis codées par des ==CENSURE== qui développent comme des pieds, on devient parano

    Le problème principal c'est que souvent y'a 10 codeurs qui sont passés avant et qui ont tous des façons de faire différentes, qui rajoutent couches sur couches et souvent tu te tapes des effets de bords monstrueux paske t'as eu la flemme de lire les 8000 lignes de code dans les 18 fichiers différents, sans une ligne de commentaire, qui permettent de gérer une fonctionnalité que tu peux faire en 50 lignes quand tu codes bien.

    Si tu savais ce que j'ai vu. La dernière fois, y'avait 6 façons différentes pour modifier/accéder à la base de donnée dans une seule et même appli :
    * des requêtes directes dans la couche interface (aspx)
    * des requètes construite dans la "couche métier" (on peut plus l'appeler comme ça), redescendues dans la couche donnée pour appel
    * des store procs en T-Sql
    * des store procs en CLR (bonjour les pb de conversion de types, notamment avec le Type decimal)
    * des TableAdapter construits automatiquement à partir de DataSets (xsd)
    * des tâches plannifées qui faisaient des traitements journaliers dans la base

    Et le pire c'est qu'il y avait des feintes : des procs qui semblaient correctes, mais qui n'étaient jamais appelées (remplacées par des requètes directes), des méthodes jamais appelées, etc...
    Bonjour le mic-mac. Je vous jure, ça donne envie de pendre du developpeur.
    Surtout quand t'as fait une sous-estimation du temps de travail, que t'es freelance et que c'est toi qui doit payer pour les conneries des autres.

    D'où ma suggestion de faire une proc sympa qui fait la vérif niveau BDD, comme ça tu es sûr que ça va marcher
    Maintenant si tu es le premier sur le projet, alors effectivement, je vote la solution de Ditch, c'est la moins lourde.

  14. #14
    Expert confirmé
    Avatar de Ditch
    Inscrit en
    Mars 2003
    Messages
    4 160
    Détails du profil
    Informations personnelles :
    Âge : 43

    Informations forums :
    Inscription : Mars 2003
    Messages : 4 160
    Par défaut
    Citation Envoyé par Mose
    Scénario à la con :
    => on veut assurer l'unicité sur un nom de login dans une page de gestion des utilisateurs.
    T0 - L'utilisateur A se connecte et charge la page des utilisateurs.
    T1 - L'utilisateur B se connecte et charge la page des utilisateurs.
    T2 - L'utilisateur A entre le login "Robert", il valide, ça l'insère en base.
    T3 - L'utilisateur B (qui n'a pas rechargé la page des utilisateurs) entre le login "Robert" et valide.
    Comment ton DataSet il peut savoir que "Robert" n'existe pas en base sans se connecter ?

    Désolé de casser ta réponse précédente, mais soit j'ai pas compris, soit tu t'es mal exprimé (c'est un peu pareil), soit tu as dit une connerie
    Je répondais à ca uniquement... Enfin soit, passons

  15. #15
    Membre confirmé Avatar de stephane.net
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    170
    Détails du profil
    Informations personnelles :
    Âge : 48
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 170
    Par défaut
    Citation Envoyé par Mose
    * des TableAdapter construits automatiquement à partir de DataSets (xsd)
    tu peux développer stp ? je débute en asp.net (et même en développement web...) et j'espère n'apprendre que des bonnes manières..

  16. #16
    Membre Expert Avatar de Mose
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    1 143
    Détails du profil
    Informations personnelles :
    Âge : 48
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 1 143
    Par défaut
    Citation Envoyé par stephane.net
    tu peux développer stp ? je débute en asp.net (et même en développement web...) et j'espère n'apprendre que des bonnes manières..
    Attention, je n'ai pas listé l'ensemble des mauvaises pratiques.
    Ce que je critique c'est d'utiliser 10 approches différentes, ça rend le code très difficile à maintenir, paske ça le rend contre-intuitif.

    Pour les DataTableAdapter , c'est un moyen très simple et graphique de faire une liaison avec une base de donnée. Voici un lien en anglais qui montre comment faire, avec des screenshots.
    http://weblogs.asp.net/bradygaster/a...-Forehead.aspx

    Ditch : dsl pour le troll... mauvais projet... client exigent... code pourri... fatigué... m'en fous je change de taf

  17. #17
    Membre confirmé
    Inscrit en
    Octobre 2005
    Messages
    194
    Détails du profil
    Informations forums :
    Inscription : Octobre 2005
    Messages : 194
    Par défaut
    Merci Ditch et Mose.
    Je crois que la meilleur solution et de combiner les deux idées, c-à-d, utiliser une variable d'application qui m'évite d'envoyer une requête d'insertion alors que la contrainte n'est pas vérifiée, et d'ajouter une méthode BDD au cas où quelqu'un fait des insert automatiques. Comme ça on évite tout problème, et on ne fait aucun jalous (je rigole sur la derniere remarque)

    Merci beaucoup.

  18. #18
    Membre Expert

    Profil pro
    Inscrit en
    Septembre 2002
    Messages
    1 581
    Détails du profil
    Informations personnelles :
    Âge : 49
    Localisation : Belgique

    Informations forums :
    Inscription : Septembre 2002
    Messages : 1 581
    Par défaut
    Citation Envoyé par Ditch
    Qu'y a-t-il de compliqué? Si la c'est une variable d'application c'est ok... Je saurais pas dire autrement

    Tu as des variables à plusieurs niveaux:
    - Application (accessible à tous)
    - Session (accessible à l'utilisateur en cours)
    - Page (uniquement dans la page)
    - ...

    je vais m'arrêter là ce qui nous intéresse c'est celle qui est partagée par tous, en Application.
    Désolé de rajouter de l'huile sur ce feu bouillant mais c'est la première fois que je lis ce topic et il m'intéresse à plusieurs titres:

    En effet, il est possible de tout gérer en passant par un dataset unique partagé au niveau de l'application soit grâce à l'objet "Application" soit grâce à l'objet Cache. Dans ce cas, on travaille en mode déconnecté, càd que l'on met le dataset à jour et à un instant T, on envoie les update à la DB en passant par un adapter quelconque. C'est en effet en théorie tout à fait possible mais en pratique très peu souvent utilisé bien que Microsoft vante le mode déconnecté, je pense qu'il ne cadre pas tout à fait avec l'architecture Web et je dois dire que je ne l'ai encore jamais rencontré personnellement.

    D'après l'expérience que j'ai, les développeurs WEB utilisent le dataset pour l'acquisition de données(par facilité et/ou réutilisation comme la liaison à plusieurs contrôles) et gèrent les mises à jour via une DAL (data access library) dont les méthodes sont appelées directement après une MAJ. Ces méthodes utilisent des procédures stockées.

    Donc, on est en mode déconnecté en ce qui concerne la "lecture" des données mais dès qu'il s'agit de faire une mise à jour, le dataset est généralement "bypassed". A mon sens le mode déconnecté est plus approprié pour des applications de type "serveur" en winform ou console.

    Vous avez souvent rencontré des développements Web utilisant le mode déconnecté à 100%?

  19. #19
    Membre confirmé Avatar de stephane.net
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    170
    Détails du profil
    Informations personnelles :
    Âge : 48
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 170
    Par défaut
    Bonjour Stephane,

    J'utilise le dataset en mode deconnecté y compris pour les mises à jour.

    L'utilisateur de l'application travaille par exemple sur un formulaire dans lequel les différentes opérations qu'il peut effectuer reviennent à faire des CRUD sur le DataSet ( comme le DAL le ferait sauf que là on est sur un cache de données ).

    Comme au sein d'une transaction, une fois le travaille terminé, l'utilisateur valide ses modifications : ça se traduit par l'appel des méthodes tableAdapter.Update() regroupées dans une fonction MyDataSet.Save implémentée dans la classe partiel de MyDataSet.

    Ou bien il peut annuler et revenir à l'état initial : DataSet.RejectChanges().

  20. #20
    Membre Expert

    Profil pro
    Inscrit en
    Septembre 2002
    Messages
    1 581
    Détails du profil
    Informations personnelles :
    Âge : 49
    Localisation : Belgique

    Informations forums :
    Inscription : Septembre 2002
    Messages : 1 581
    Par défaut
    Je ne pense pas que ce soit techniquement la solution la plus efficace à mettre en oeuvre mais bon, après tout, cela se justifie sans doute...mais bon, je suis plutôt d'accord avec ceci:

    Citation Envoyé par 32 auteurs ont écrit
    A common misconception is that the DataSet is required to ensure scalability in a web application.
    Now that you understand the ASP.NET request processing architecture, you can probably see that
    this isn’t the case. A web application runs only for a matter of seconds (if that long). This means
    that even if your web application uses direct cursor-based access, the lifetime of the connection
    is so short that it won’t significantly reduce scalability, except in the mostly highly trafficked web
    applications.
    In fact, the DataSet makes much more sense with distributed applications that use a rich Windows
    client. In this scenario, the clients can retrieve a DataSet from the server (perhaps using a web
    service), work with their DataSet objects for a long period of time, and reconnect to the system only
    when they need to update the data source with the batch of changes they’ve made. This allows the
    system to handle a much larger number of concurrent users than it would be able to if each client
    maintained a direct, long-lasting connection. It also allows you to efficiently share resources by
    caching data on the server and pooling connections between client requests.

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. Contrainte Architecture 3 tiers
    Par Tunisiano87 dans le forum VB.NET
    Réponses: 1
    Dernier message: 15/04/2010, 22h37
  2. Architecture 3 tiers : quelle est la véritable nouveauté ?
    Par unix27 dans le forum Langages de programmation
    Réponses: 8
    Dernier message: 11/03/2007, 18h21
  3. [VB.NET] Architecture n-tiers
    Par Dnx dans le forum ASP.NET
    Réponses: 2
    Dernier message: 08/02/2005, 19h10
  4. contrainte d'unicité un peu spéciale....
    Par bdkiller dans le forum PostgreSQL
    Réponses: 2
    Dernier message: 23/11/2004, 17h54
  5. [Design Patterns] Architecture 3 tiers
    Par HPJ dans le forum Design Patterns
    Réponses: 1
    Dernier message: 29/07/2003, 11h49

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