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 :

Spécification des Interface dans la couche Business et DataAccess


Sujet :

ASP.NET

  1. #21
    Expert confirmé
    Avatar de Immobilis
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Mars 2004
    Messages
    6 559
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Mars 2004
    Messages : 6 559
    Par défaut
    Citation Envoyé par Laurent Jordi Voir le message
    J'aimerais bien voir un exemple concret car personnellement, je n'utilise pratiquement pas les interfaces. Uniquement les classes abstraites.
    L'implémentation du CRUD peu être contractualisé pour les classes de la BLL et de la DAL. Ainsi, tu es certain que chacune des classes de tes couches présenteront des méthodes "normalisés".
    Citation Envoyé par Laurent Jordi Voir le message
    Juste pour info, je crée des classes d'entrée et de sorties (façades) qui sont (normalement) passives. Elles permettent de passer les paramètres aux méthodes STATIQUES de la couche business dont les méthode qui ne renvoient des valeurs ne renvoient QUE des façades.

    Les façades sont toujours sérialisables.
    Ce bien sont des objets de transfert de données. On dit aussi le Model, Entité ou Business Objects. Le projets dans lequel ces classes sont développées est transversal, référencé par la DAL et BLL pour pouvoir traverser toutes les couches. On en avait un peu discuté déjà.
    Citation Envoyé par Laurent Jordi Voir le message
    Je pourrais peut être créer une interface IBusiness dont les méthodes pourraient toujours renvoyer un membre de IFacadeOutput (dont tous les membres de facade hériteraient) et prendre en entrée IFacadeInput.
    On ne parle pas d'héritage pour les interface mais d'implémentation. Utiliser un "IFacadeInput" implique que tous tes DTO auront les mêmes propriétés que celles présentes dans l'interface. Ce qui n'est rarement le cas. Sauf pour une classe abstraite qui doit être hérité. Il vaut mieux utiliser la "gérénicité" ainsi:
    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
     
    /// <summary>
    /// This Interface should be implemented by all Bll classes that manage objects from the model.
    /// These methods are from the basic CRUD concept.
    /// </summary>
    /// <typeparam name="T">Generic type</typeparam>
    public interface IBasicBll<T>
    {
     
    	#region Members
     
    	/// <summary>
    	/// Method used to insert/create an entity in the database
    	/// </summary>
    	/// <param name="obj">The entity to create</param>
    	/// <returns>Integer: the unique id of the record</returns>
    	int Create(T obj);
     
     
    	/// <summary>
    	/// Deletes an entity in the database
    	/// </summary>
    	/// <param name="obj">An <c>Entity</c> of which unique identifier is set</param>
    	/// <returns>True if success. False if fails.</returns>
    	bool Delete(T obj);
     
     
    	/// <summary>
    	/// Updates an entity in the database
    	/// </summary>
    	/// <param name="obj">The entity to update</param>
    	/// <returns>True if success. False if fails.</returns>
    	bool Update(T obj);
     
     
    	/// <summary>
    	/// Returns an entity from the database
    	/// </summary>
    	/// <param name="obj">An <c>Entity</c> of which unique identifier is set</param>
    	/// <returns>The requested entity</returns>
    	T Load(T obj);
     
    	#endregion	
    }
    Citation Envoyé par Laurent Jordi Voir le message
    Mais je n'arrive pas à voir la valeur ajoutée de cette technique...
    Ce code permet d'implémenter le CRUD sur la BLL et la DAL. Le "T" pour "Type" (mais on peu utiliser n'importe quelle lettre) remplace n'importe quel objet DTO à faire passer pour traiter les données.
    Citation Envoyé par Laurent Jordi Voir le message
    A tous, notez qu'un très bon moyen de ne pas avoir un gros boxon dans un projet et d'encapsuler chaque couche dans une DLL différente et d'avoir un DLL Domain qui contient toutes les façaces.

    Après si ta couche présentation ne référence que la couche business et pas la couche data, tu es tranquille. Ca marche bien avec les using mais on peut être tenté de faire des écarts.
    C'est le schéma "classique" d'une architecture en couches. Perso j'ajoute même un projet console qui me permet de tester ma BLL avant de créer mon interface web. Ainsi, je sais que les couches sont indépendante du choix du type d'interface.

    A+
    "Winter is coming" (ma nouvelle page d'accueil)

  2. #22
    Membre Expert Avatar de Arthis
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    1 265
    Détails du profil
    Informations personnelles :
    Âge : 48
    Localisation : Italie

    Informations forums :
    Inscription : Octobre 2003
    Messages : 1 265
    Par défaut
    Perso j'ajoute même un projet console qui me permet de tester ma BLL avant de créer mon interface web. Ainsi, je sais que les couches sont indépendante du choix du type d'interface.
    Et pourquoi pas un projet de test à la place de la console ?

  3. #23
    Expert confirmé
    Avatar de Immobilis
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Mars 2004
    Messages
    6 559
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Mars 2004
    Messages : 6 559
    Par défaut
    Pourquoi pas. Mais j'ai pas mal travaillé sur VS 2005 sur lequel ce type de projet n'est pas disponible.
    "Winter is coming" (ma nouvelle page d'accueil)

  4. #24
    Membre Expert

    Profil pro
    Inscrit en
    Octobre 2005
    Messages
    1 377
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Octobre 2005
    Messages : 1 377
    Par défaut
    Moi j'utilise Nunit avec VS 2005 et je continuerai à l'utiliser avec VS 2008 je pense
    Échouer, c'est avoir la possibilité de recommencer de manière plus intelligente.

    Twitter Blog Mon site

    Mon article sur l'agilité

  5. #25
    CUCARACHA
    Invité(e)
    Par défaut
    Pour ma part, j'ai un peu fait l'impasse sur VS2005. A 2 missions près, je suis passé directement de VS2003 (ASP.net / VB.Net 1.1) à VS2008 (ASP.net / C# 3.5).

Discussions similaires

  1. insérer des données dans oracle via business objects
    Par syntax_error dans le forum SQL
    Réponses: 1
    Dernier message: 22/10/2010, 14h13
  2. interet des interfaces dans une architecture n-tiers
    Par anouar204 dans le forum Architecture
    Réponses: 1
    Dernier message: 28/01/2010, 19h14
  3. Stocker des variables dans la couche application
    Par mumuri dans le forum Débuter avec Java
    Réponses: 5
    Dernier message: 21/08/2009, 17h33
  4. Utilisation des interfaces dans des méthodes
    Par kyrilkarlier dans le forum Windows Forms
    Réponses: 7
    Dernier message: 26/05/2009, 14h29
  5. L’utilité des interfaces dans l’orienté objet
    Par bilred dans le forum Langage
    Réponses: 4
    Dernier message: 09/03/2009, 09h55

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