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 MVC Discussion :

[LINQtoEntities] Séparation des requêtes


Sujet :

ASP.NET MVC

  1. #1
    Membre chevronné
    Avatar de stailer
    Homme Profil pro
    Architecte technique
    Inscrit en
    Mars 2003
    Messages
    1 136
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Hautes Pyrénées (Midi Pyrénées)

    Informations professionnelles :
    Activité : Architecte technique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2003
    Messages : 1 136
    Points : 2 187
    Points
    2 187
    Billets dans le blog
    3
    Par défaut [LINQtoEntities] Séparation des requêtes
    Bonjour,

    J'ai dans quelques méthodes métiers des requêtes LINQ que j'aimerais enregistrer dans des classes séparées.
    Le problème est que la plupart de ces requêtes mes renvoient des objets de types "Anonymes" car pointants vers plusieurs

    Concrètement la fin de ma requête se fini par :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
     var  x = from x in cnx.MyEntities ... 
    select new   {  
     table1.champ, 
      table2.champ  ..etc 
    }
    La seule solution que j'ai trouvé pour séparer cette requête est de créer une classe intermédiaire qui va reprendre les champs des 2 tables et du coup ma méthode va pouvoir renvoyer une collection de type de cette classe.

    D'ou ma question : est-il possible , en utilisant linq to entities et join de faire une méthode encapsulant une requête et renvoyant une collection anonyme ?

    Typiquement :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    public List<MachinsAnonymes> getUtilisateursAndProfils() {
     
       return  = from x in cnx.MyEntities ... 
         select new   {  
            table1.champ, 
            table2.champ  ..etc 
        } 
    }
    Et de l'appeler comme ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    var x = getUtilisateursAndProfils();
    Merci d'avance pour vos réponses,
    .o0o__St@iLeR__oOo.

    Lead Developer

    ASP.NET MVC - MCP/MCSD ASP.NET
    PHP Zend Framework / PhalconPHP
    Cordova/Xamarin IOS/Android
    Kendo UI - ExtJS - JQwidgets
    SQL Server / MySQL

  2. #2
    Membre éprouvé Avatar de anthyme
    Homme Profil pro
    Inscrit en
    Mars 2004
    Messages
    1 559
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mars 2004
    Messages : 1 559
    Points : 1 257
    Points
    1 257
    Par défaut
    A part créer tes propres class à la main ou alors balader des objects (ou dynamic en .net 4.0) il n'y a pas de solutions miracles.

    L'approche que tu as c'est l'approche à l ancienne :
    DAL : des DAO qui exécute les requêtes SQL
    BL : Couche métier qui expose des méthodes métier, appel les DAO et appliquer des règles métiers aux résultats (validation, sécurité, ...)
    UI : créer l'interface et se utilise les méthodes métiers

    Cette approche ("à l'ancienne") était bien dans le cas d'utilisation du SQL mais avec linq la donne à pas mal changé et la plupart des architecte sont d'avis à revoir leur approche DAL.
    En effet le but originel des DAO est en plus grosse partie de transformer les données brutes en objets plus que de contenir la requête.

    Certain développeurs ont tout simplement supprimé leur DAO. Moi j'ai choisi cette approche :
    - Couche Repository : 80% de la couche DAL et une partie de la couche business
    - Couche Domain model : correspond aux objets business de l'application et encapsule une bonne partie des regles business comme la validation
    - Couche Controller (asp.net MVC) ou ViewModel (WPF,Silverlight) qui connecte la couche UI aux repositories
    - Couche UI "bindé" au controller/ViewModel

    Voila mon point de vue, mon architecture

  3. #3
    Membre chevronné
    Avatar de stailer
    Homme Profil pro
    Architecte technique
    Inscrit en
    Mars 2003
    Messages
    1 136
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Hautes Pyrénées (Midi Pyrénées)

    Informations professionnelles :
    Activité : Architecte technique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2003
    Messages : 1 136
    Points : 2 187
    Points
    2 187
    Billets dans le blog
    3
    Par défaut
    En Silverlight je suis en MVVM effectivement et les requêtes sont sur le serveur appelées avec WCF RIA Services.

    Pour le cas dont je parle ci-dessus je suis sur une application ASP.NET MVC 2 et dans une de mes actions sur un contrôleur j'ai une action qui comporte une requêtes assez volumineuse... De plus je voudrais que cette requête soit appelée d'autres endroits éventuellement, d'ou l'idée de la séparer dans une classe à part.

    bref, je vais voir du côté de .net 4.0 et des dynamic si je peux pas faire quelque chose plus rapidement que de créer une classe
    .o0o__St@iLeR__oOo.

    Lead Developer

    ASP.NET MVC - MCP/MCSD ASP.NET
    PHP Zend Framework / PhalconPHP
    Cordova/Xamarin IOS/Android
    Kendo UI - ExtJS - JQwidgets
    SQL Server / MySQL

  4. #4
    Membre éprouvé Avatar de anthyme
    Homme Profil pro
    Inscrit en
    Mars 2004
    Messages
    1 559
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mars 2004
    Messages : 1 559
    Points : 1 257
    Points
    1 257
    Par défaut
    Un repository serait une façon de la "stocker quelque part" tu pourrais ensuite l'appeler de ton controlleur, ou d'ailleurs

    Bon courage

  5. #5
    Membre chevronné
    Avatar de stailer
    Homme Profil pro
    Architecte technique
    Inscrit en
    Mars 2003
    Messages
    1 136
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Hautes Pyrénées (Midi Pyrénées)

    Informations professionnelles :
    Activité : Architecte technique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2003
    Messages : 1 136
    Points : 2 187
    Points
    2 187
    Billets dans le blog
    3
    Par défaut
    Ok, pour l'heure j'ai utilisé la méthode du "dynamic" en C# 4...

    Peux-tu m'en dire plus concrètement par rapport aux "Repository" ?
    Je comprends pas ce que tu entends par la
    .o0o__St@iLeR__oOo.

    Lead Developer

    ASP.NET MVC - MCP/MCSD ASP.NET
    PHP Zend Framework / PhalconPHP
    Cordova/Xamarin IOS/Android
    Kendo UI - ExtJS - JQwidgets
    SQL Server / MySQL

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

Discussions similaires

  1. [PDO] Séparation des couches et portabilité d'une requêtes SQL
    Par dancom5 dans le forum PHP & Base de données
    Réponses: 3
    Dernier message: 26/04/2014, 02h15
  2. log des requêtes sous sybase 10
    Par VsMetal dans le forum Sybase
    Réponses: 3
    Dernier message: 03/05/2004, 15h09
  3. Fichier log des requêtes d'une bdd
    Par Sub0 dans le forum Administration
    Réponses: 4
    Dernier message: 22/03/2004, 15h12
  4. Réponses: 4
    Dernier message: 16/03/2004, 15h16
  5. formatage des requêtes sous psql
    Par Bouboubou dans le forum PostgreSQL
    Réponses: 2
    Dernier message: 03/02/2004, 12h10

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