Etude de cas avec ASP.NET 2.0, C#, Spring.NET et NHibernate


précédentsommairesuivant

IV. L'étude de cas

Nous souhaitons écrire une application .NET permettant à un utilisateur de faire des simulations de calcul de la paie des assistantes maternelles de l'association " Maison de la petite enfance " d'une commune. Nous nous intéresserons autant à l'organisation du code DotNet de l'application qu'au code lui-même.

IV-A. La base de données

Les données statiques utiles pour construire la fiche de paie sont placées dans une base de données SQL Server Express nommée dbpam (pam=Paie Assistante Maternelle). Cette base a un administrateur appelé sa ayant le mot de passe msde.

Image non disponible

La base a trois tables, EMPLOYES, COTISATIONS et INDEMNITES, dont la structure est la suivante :

Table EMPLOYES : rassemble des informations sur les différentes assistantes maternelles

Structure :

Image non disponible

Son contenu pourrait être le suivant :

Image non disponible

Table COTISATIONS : rassemble les taux des cotisations sociales prélevées sur le salaire

Structure :

Image non disponible

Son contenu pourrait être le suivant :

Image non disponible

Les taux des cotisations sociales sont indépendants du salarié. La table précédente n'a qu'une ligne.

Table INDEMNITES : rassemble les différentes indemnités dépendant de l'indice de l'employé

Image non disponible

Son contenu pourrait être le suivant :

Image non disponible

On notera que les indemnités peuvent varier d'une assistante maternelle à une autre. Elles sont en effet associées à une assistante maternelle précise via l'indice de traitement de celle-ci. Ainsi Mme Marie Jouveinal qui a un indice de traitement de 2 (table EMPLOYES) a un salaire horaire de 2,1 euros (table INDEMNITES).

Les relations entre les trois tables sont les suivantes :

Image non disponible

Il y a une relation de clé étrangère entre la colonne EMPLOYES(INDICE) et la colonne INDEMNITES(INDICE).

La base de données [dbpam] ainsi créée donne naissance à deux fichiers dans le dossier de SQL Server Express :

Image non disponible

Les fichiers [dbpam.mdf, dbpam_log.ldf] peuvent être transportés sur une autre machine et être réattachés au SGBD SQL Server Express de cette machine. Voici comment procéder :

  • les fichiers de la BD [dbpam] sont dupliqués dans un dossier
Image non disponible
  • on lance SQL Server Express
  • avec le client SQL Server Management Studio Express, on attache le fichier [dbpam.mdf] au SGBD :
Image non disponible
Image non disponible
  • clic droit sur [Databases] / Attach
  • choix du fichier [dbpam.mdf] via un bouton [Add] non représenté
  • le fichier attaché va donner naissance à une BD qui ne doit pas déjà exister. Ici, dans le champ [Attach As] on a donné le nom [dbpam2] à la nouvelle BD.
  • on voit la nouvelle BD et ses tables

Cette technique de l'attachement d'une BD est utile pour transporter une BD d'un poste à un autre et nous l'utiliserons parfois ici.

IV-B. Mode de calcul du salaire d'une assistante maternelle

Nous présentons maintenant le mode de calcul du salaire mensuel d'une assistante maternelle. Nous prenons pour exemple, le salaire de Mme Marie Jouveinal qui a travaillé 150 h sur 20 jours pendant le mois à payer.

Les éléments suivants sont pris en compte : [TOTALHEURES]: total des heures travaillées dans le mois
[TOTALJOURS]: total des jours travaillés dans le mois
[TOTALHEURES]=150
[TOTALJOURS]= 20
Le salaire de base de l'assistante maternelle est donné par la formule suivante : [SALAIREBASE]=([TOTALHEURES]*[BASEHEURE])*(1+[INDEMNITESCP]/100) [SALAIREBASE]=(150*[2.1])*(1+0.15)= 362,25
Un certain nombre de cotisations sociales doivent être prélevées sur ce salaire de base : Contribution sociale généralisée et contribution au remboursement de la dette sociale : [SALAIREBASE]*[CSGRDS/100]
Contribution sociale généralisée déductible : [SALAIREBASE]*[CSGD/100]
Sécurité sociale, veuvage, vieillesse : [SALAIREBASE]*[SECU/100]
Retraite Complémentaire + AGPF + Assurance Chômage : [SALAIREBASE]*[RETRAITE/100]
CSGRDS : 12,64
CSGD : 22,28
Sécurité sociale : 34,02
Retraite : 28,55
Total des cotisations sociales : [COTISATIONSSOCIALES]=[SALAIREBASE]*(CSGRDS+CSGD+SECU+RETRAITE)/100 [COTISATIONSSOCIALES]=97,48
Par ailleurs, l'assistante maternelle a droit, chaque jour travaillé, à une indemnité d'entretien ainsi qu'à une indemnité de repas. A ce titre elle reçoit les indemnités suivantes : [Indemnités]=[TOTALJOURS]*(ENTRETIENJOUR+REPASJOUR) [INDEMNITES]=104
Au final, le salaire net à payer à l'assistante maternelle est le suivant : [SALAIREBASE]-[COTISATIONSSOCIALES]+[INDEMNITÉS] [salaire NET]=368,77

IV-C. Rappels ADO.NET

L'application de calcul de paie a besoin des informations de la base de données [dbpam]. Son architecture sera la suivante :

Image non disponible
  • en [1], l'utilisateur fait une demande
  • en [2], l'application de paie la traite.
  • elle peut alors avoir besoin des données de la base de données. Elle fait alors une requête au fournisseur (provider) ADO.NET du SGBD utilisé [4].
  • celui-ci exploite la base de données [5] et rend ses résultats au fournisseur ADO.NET qui lui-même les remonte à l'application
  • celle-ci exploite ces résultats et élabore une réponse [5] pour l'utilisateur

Nous rappelons maintenant les principales interfaces présentées par un fournisseur ADO.NET à ses clients [3].

En mode connecté, l'application :

  • ouvre une connexion avec la source de données
  • travaille avec la source de données en lecture/écriture
  • ferme la connexion

Trois interfaces ADO.NET sont principalement concernées par ces opérations :

  • IDbConnection qui encapsule les propriétés et méthodes de la connexion.
  • IDbCommand qui encapsule les propriétés et méthodes de la commande SQL exécutée.
  • IDataReader qui encapsule les propriétés et méthodes du résultat d'un ordre SQL Select.

L'interface IDbConnection

Sert à gérer la connexion avec la base de données. Parmi les méthodes M et propriétés P de cette interface on trouve les suivantes :

Nom Type Rôle
ConnectionString P chaîne de connexion à la base. Elle précise tous les paramètres nécessaires à l'établissement de la connexion avec une base précise.
Open M ouvre la connexion avec la base définie par ConnectionString
Close M ferme la connexion
BeginTransaction M démarre une transaction.
State P état de la connexion : ConnectionState.Closed, ConnectionState.Open, ConnectionState.Connecting, ConnectionState.Executing, ConnectionState.Fetching, ConnectionState.Broken

Si Connection est une classe implémentant l'interface IDbConnection, l'ouverture de la connexion peut se faire comme suit :

 
CacherSélectionnez

L'interface IDbCommand

Sert à exécuter un ordre SQL ou une procédure stockée. Parmi les méthodes M et propriétés P de cette interface on trouve les suivantes :

Nom Type Rôle
CommandType P indique ce qu'il faut exécuter - prend ses valeurs dans une énumération :
- CommandType.Text : exécute l'ordre SQL défini dans la propriété CommandText. C'est la valeur par défaut.
- CommandType.StoredProcedure : exécute une procédure stockée dans la base
CommandText P - le texte de l'ordre SQL à exécuter si CommandType= CommandType.Text
- le nom de la procédure stockée à exécuter si CommandType= CommandType.StoredProcedure
Connection P la connexion IDbConnection à utiliser pour exécuter l'ordre SQL
Transaction P la transaction IDbTransaction dans laquelle exécuter l'ordre SQL
Parameters P la liste des paramètres d'un ordre SQL paramétré. L'ordre update articles set prix=prix*1.1 where id=@id a le paramètre @id.
ExecuteReader M pour exécuter un ordre SQL Select. On obtient un objet IDataReader représentant le résultat du Select.
ExecuteNonQuery M pour exécuter un ordre SQL Update, Insert, Delete. On obtient le nombre de lignes affectées par l'opération (mises à jour, insérées, détruites).
ExecuteScalar M pour exécuter un ordre SQL Select ne rendant qu'un unique résultat comme dans : select count(*) from articles.
CreateParameter M pour créer les paramètres IDbParameter d'un ordre SQL paramétré.
Prepare M permet d'optimiser l'exécution d'une requête paramétrée lorsqu'elle est exécutée de multiples fois avec des paramètres différents.

Si Command est une classe implémentant l'interface IDbCommand, l'exécution d'un ordre SQL sans transaction aura la forme suivante :

 
CacherSélectionnez

L'interface IDataReader

Sert à encapsuler les résultats d'un ordre SQL Select. Un objet IDataReader représente une table avec des lignes et des colonnes, qu'on exploite séquentiellement : d'abord la 1re ligne, puis la seconde…. Parmi les méthodes M et propriétés P de cette interface on trouve les suivantes :

Nom Type Rôle
FieldCount P le nombre de colonnes de la table IDataReader
GetName M GetName(i) rend le nom de la colonne n° i de la table IDataReader.
Item P Item[i] représente la colonne n° i de la ligne courante de la table IDataReader.
Read M passe à la ligne suivante de la table IDataReader. Rend le booléen True si la lecture a pu se faire, False sinon.
Close M ferme la table IDataReader.
GetBoolean M GetBoolean(i) : rend la valeur booléenne de la colonne n° i de la ligne courante de la table IDataReader. Les autres méthodes analogues sont les suivantes : GetDateTime, GetDecimal, GetDouble, GetFloat, GetInt16, GetInt32, GetInt64, GetString.
Getvalue M Getvalue(i) : rend la valeur de la colonne n° i de la ligne courante de la table IDataReader en tant que type object.
IsDBNull M IsDBNull(i) rend True si la colonne n° i de la ligne courante de la table IDataReader n'a pas de valeur ce qui est symbolisé par la valeur SQL NULL.

L'exploitation d'un objet IDataReader ressemble souvent à ce qui suit :

 
CacherSélectionnez

précédentsommairesuivant

Vous avez aimé ce tutoriel ? Alors partagez-le en cliquant sur les boutons suivants : Viadeo Twitter Facebook Share on Google+   

  

Les sources présentées sur cette page sont libres de droits et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation constitue une œuvre intellectuelle protégée par les droits d'auteur. Copyright © 2011 Serge Tahé. Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents, images, etc. sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts.