Entités

Nous voilà arrivés au pays des "entités". Mais qui sont-elles ?

Pour mieux intégrer cette notion d'entité, nous nous référons à sa définition dans le cadre du modéle entité-relation développé par Dr Peter Chen :

"une chose qui peut être identifiée distinctement ayant une signification pour une organisation".

Spécification

Dans le cadre du service que nous développons, eProject, nous voulons mettre en relation les entités suivantes :

  • un projet métier : vue d'ensemble, besoin détaillé et périmètre d'un prototype
  • 3 interlocuteurs : client, commercial et consultant

Lors de la définition de notre besoin, nous avons également précisé les règles d'association à travers les spécifications suivantes :

  • Pour consulter NourY Solutions sur mes besoins métier, je veux pouvoir soumettre mon projet ainsi que mes projets ultérieurs en tant qu'interlocuteur client
  • Pour piloter la relation clientèle, je prend en charge le suivi de l'avancement des projets de chacun de mes clients en tant qu'interlocuteur commercial
  • Pour produire un prototype à partir de l'analyse d'un besoin, je veux pouvoir estimer la charge de travail sur la base de chaque projet en tant qu'interlocuteur consultant

Modélisation

Modèle eProject

Une fois les concepts digérés et notre besoin spécifié, Salamanca nous permet de rapidement modéliser le socle de notre métier représenté dans le diagramme ci-dessus.

Pour cela, nous ouvrons le modèle SDML du projet Eproject.Model de la solution Visual Studio créée lors de notre départ.

VS_Model_Toolbox

La palette d'éléments mise à disposition dans la boite à outils est d'une aide précieuse pour implémenter notre modèle de 5 entités simplement par glisser-déposer et définition des propriétés des associations :

  • 1 composition entre Client et Projet
  • 2 associations bidirectionnelles entre Commercial et Client, entre Consultant et Projet 
  • 3 héritages : Client, Commercial et Consultant sont tous des Interlocuteurs du Projet

Nous pouvons maintenant définir les attributs soit par glisser-déposer de l'élément "Attribute" à partir de la boîte à outils, soit par clic droit sur l'entité, puis "Ajouter un nouveau Entity Attribute" à partir du menu contextuel.

Le nom et le type (string par défaut) de l'attribut peuvent être définis directement de manière graphique alors que la fenêtre de "Propriétés" permet également de spécifier des règles validées automatiquement grâce à l'utilisation de l'une des 4 bibliothèques de Salamanca : Data Rules

La facilité d'intégration de règles métier est l'une des grandes forces de Salamanca, aussi nous lui dédierons bientôt une escapade de découverte avant la prochaine escale !

Génération

Une fois les attributs et les règles associées définis pour chaque entité, il nous reste qu'à générer le code correspondant par un simple clic sur l'icône "Transformer tous les modèles" présente dans la barre d'outils de la fenêtre "Explorateur de solutions".

Code généré

A la fin de la génération, nous obtenons l'ensemble du code de la couche d'accès aux données basé sur la bibliothèque générique de Salamanca dédié à cet usage : Data Access. Cette couche est constituée :

  • du code SQL de création des tables associées aux entités
  • des procédures stockées pour les opérations CRUD sur chaque entité
  • des interfaces et classes de mapping entre entités et tables (Data Mappers)
  • des ressources liant procédures stockées et méthodes CRUD implémentées dans les Data Mappers
  • des interfaces et classes des entités du domaine métier

L'avantage évident de cette formule "Modélisation + Génération" est de ne plus avoir à taper du code redondant. Pour preuve, je vous invite à satisfaire votre curiosité et éditer les fichiers générés : on retrouve le même air dans chaque classe avec quelques variations autour du thème...

Mais le réel instant de bonheur du point de vue du développeur se savoure lors de l'implémentation de demandes d'évolutions telles que l'ajout d'attributs, ou mieux, lors de la modification de relations. Personnellement, j'ai par le passé consommé beaucoup de temps dans la maintenance du code SQL et objet suite aux évolutions inhérentes à tout projet métier.

Je vous invite donc dés maintenant à faire l'expérience avec le modèle métier de votre projet en cours avant notre prochaine escale : l'automatisation de la mise en place de la base de données.