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

Contribuez .NET Discussion :

Linq to SQL en n-tiers


Sujet :

Contribuez .NET

  1. #1
    Expert confirmé

    Avatar de Philippe Vialatte
    Homme Profil pro
    Architecte technique
    Inscrit en
    Juillet 2004
    Messages
    3 029
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Architecte technique
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Juillet 2004
    Messages : 3 029
    Par défaut Linq to SQL en n-tiers
    Bonsoir a tous...

    suite a un début de conversation dans le forum (et pour éviter de ne jamais pouvoir voir la suite de celle-ci, vu le rythme effrene...), j'ai eu (enfin) l'occasion de mettre en place un VS 2008 au travail (il était temps ), et la première chose a été de prendre 2 pauses repas pour essayer de démêler un peu Linq To SQL...et essayer d'en sortir un machin sympa...en gros, un portage d'appli non vitale

    Au bout du compte, je suis arrive a l'archi provisoire suivante :

    DTO : couche d'objets de transfert de données : mes objets c# classiques (Article, client, etc...), decores des atributs qui vont bien pour les passer a un service wcf
    Repository : couche d'accés aux données : le dbml, une interface IRepository, une implementation LinqRepository. Les fonctons du repository remplissent des objets de DTO, et les renvoient soit sous forme d'objets tout seuls, soit sous forme d'Iqueryable<dto.objet>
    Service : dans l'appli sur laquelle je teste, on a deux clients legers en winform, et un client java -> partie "business" et service WCF (en plus, c'est buzzword compliant, service, avec SOA )
    Client : mon client (pour le moment, une console).


    Qu'est-ce que vous en pensez ?

    Est-ce que je me plante grave ?

    Est-ce que ca vaut le coup de développer plus (article/tuto...voire a plusieurs mains, si certains se sentent ?)

    Ce qui me gene avec l'approche Linq To Sql, c'est l'omnipresence du contexte...cette organisation a l'avantage de confiner le contexte dans une seule couche, et de rendre les clients completement ignorants du systeme de persistance...mais est-ce que ca vaut le coup (rhétorique, pour moi, ça le vaut )

    Mon Blog

    The Cake is still a lie !!!



    Vous voulez contribuer à la rubrique .NET ? Contactez-moi par MP.
    Vous voulez rédiger des articles pour la rubrique .NET ? Voici la procédure à suivre.

  2. #2
    Rédacteur
    Avatar de SaumonAgile
    Homme Profil pro
    Team leader
    Inscrit en
    Avril 2007
    Messages
    4 028
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Team leader
    Secteur : Conseil

    Informations forums :
    Inscription : Avril 2007
    Messages : 4 028
    Par défaut
    Ton approche ne me choque pas. Je ne vois pas d'inconvénients majeurs.

    Personnellement, j'ai un dbml dans la DAL qui génère les entités dans le namespace entities, et le context dans le namespace DAL.
    Le context a une portée internal.
    La couche business est dans la même assembly et s'appuie sur le context en passant par un factory pour renvoyer des collections d'objets et/ou des objets simples.
    Les services utilisent la couche business et ne sont presque que des facades. Je postsharp la gestion d'exceptions dans le service pour la gestion des Fault et la validation (enterprise library contrib) dans le business.
    Tout ça multiplié par n services pour former un nuage de services (aka SOA).

    Les applis clientes piochent dans les services WCF les "services" (au sens conceptuel) dont elles ont besoin.
    Besoin d'un MessageBox amélioré ? InformationBox pour .NET 1.1, 2.0, 3.0, 3.5, 4.0 sous license Apache 2.0.

    Bonnes pratiques pour les accès aux données
    Débogage efficace en .NET
    LINQ to Objects : l'envers du décor

    Mon profil LinkedIn - MCT - MCPD WinForms - MCTS Applications Distribuées - MCTS WCF - MCTS WCF 4.0 - MCTS SQL Server 2008, Database Development - Mon blog - Twitter

  3. #3
    Membre chevronné
    Profil pro
    Inscrit en
    Février 2003
    Messages
    311
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2003
    Messages : 311
    Par défaut
    Je ressors un peu le topic, mais je me pose une question sur la gestion des exceptions lancées par LINQ.

    Par exemple, LINQ lance une SqlException en cas d'insertion d'une valeur nulle sur un champ qui ne peut pas l'être, ou en cas de rupture de la clé d'unicité. Il lance une ArgumentNullException quand on tente d'ajouter un objet qui est null.

    Est-ce que vous laissez ces exceptions se lancer pour les capturer dans la DAL ou la BLL?
    Ou bien est-ce que vous controllez avant l'insertion que tout va bien se passer et lancez vous-même vos exceptions si vous avez détecté avant coup qu'il va y avoir un problème?

    J'imagine que selon l'application ça peut varier, mais vous faites comment vous?

Discussions similaires

  1. Linq to SQL et architecture n-Tier
    Par neptune dans le forum Framework .NET
    Réponses: 1
    Dernier message: 10/06/2008, 18h04
  2. Réponses: 7
    Dernier message: 19/02/2008, 14h14
  3. [Linq 2 SQL] Problème de modélisation
    Par tomlev dans le forum Accès aux données
    Réponses: 5
    Dernier message: 12/02/2008, 23h29
  4. [Linq to sql] db.add() ?
    Par telynette dans le forum Accès aux données
    Réponses: 2
    Dernier message: 08/02/2008, 19h54
  5. [Linq to SQL] Refresh du dbml
    Par zeavan dans le forum Visual Studio
    Réponses: 5
    Dernier message: 02/01/2008, 10h15

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