mercredi 3 février 2010

TP Active Record - Articles/Catégorie [Compil] (Partie 4)

Nous voici dans la 4nd section TP Active Record, ceci est l'explication pas à pas d'un TP de création de site Web permettant de créer des articles et d'en associer des catégories.
Voici la liste des articles disponibles :
Dans cette partie nous allons verifier le fonctionnement du code que vous avons produit dans les parties précédentes.
Notre base de travail avance et est "solide". Nous allons effectuer maintenant quelques vérifications. Premièrement, la compilation,  en toute logique, le projet DomainModel doit pouvoir se générer sans erreurs. 
Afin de pouvoir tester simplement notre " Model " nous allons rajouter un nouveau projet de type Console à notre solution, nommez la " WinConsole " par exemple.

1. Commençons par ajouter la référence à notre projet DomainModel.

2.Ajouter également la référence aux DLL suivantes :

  • Castle.ActiveRecord.dll (fonction de config générale)
  • NHibernate.dll
  • NHibernate.ByteCode.Castle.dll (fonctions appelées depuis ActiveRecord)

3. Namespaces utiles (using)
using DomainModel.Models;
using Castle.ActiveRecord;
using Castle.ActiveRecord.Framework.Config;

4. Configuration de l'application pour ActiveRecord :
Ensuite, il faut décrire les éléments de connexion pour la partie base de données. Cette configuration s'effectue depuis un fichier Xml, on stipule la chaine de connexion, le mode de connexion, le proxy ...


  
    
    
    
    
    
    
  


Maintenant coté code C#, il faut relier le fichier de configuration ainsi créer pour l'associer a notre application a proprement parler. Pour cela, il faut instancier un " XmlConfigurationSource " qui pointe ver le fichier XML.
Après ca, il faut activer l'ActiveRecord, en précisant quelles entités il faut démarrer. Ceci s'effectuer grâce a la 2nd ligne simpliste (utilisation de typeof)

XmlConfigurationSource source = new XmlConfigurationSource("ActiveRecord.xml");

ActiveRecordStarter.Initialize(source, typeof(Article), typeof(Categorie));

5. Mais la base de données dans tout ca ?!
On y arrive ! En fait, a ce niveau la, on va demander a NHibernate et ActiveRecord de nous générer automatiquement le script/schéma de la base de données (Séquences, tables, contraintes…). Bien entendu, ce n'est pas spécialement le mode de fonctionnement à faire lors de " vrais " développements professionnel, mais cela permet de vérifier le schéma et de me faire faire par le code rapidement (autre avantage c'est aussi de pouvoir le régénérer). A ce niveau la, on ne se souci pas de comment les tables sont créées (on va laisser le schéma de NHibernate par défaut, tablespace, extends …)

ActiveRecordStarter.GenerateCreationScripts("monScript.sql");

Attention : si vous voyez sur des sites la fonction ActiveRecordStarter.CreateSchema(); méfiez vous !!! Cette fonction créer DIRECTEMENT le schéma dans votre instance de base de données préciser dans votre fichier de configuration.

Si vous aller maintenant dans votre répertoire de génération " /bin/ " vous devrez retrouver le fichier " monScript.sql " contenant toutes les instructions SQL pour créer votre schéma. Ouvrez votre éditeur préféré (Toad) et lancer les requêtes SQL.
A ce niveau la vous pouvez rajouter quelques données dans vos tables histoire de pouvoir parcourir dans les futurs exemples.

Un 1er ajout dans la base de données (mode console)

Retournons donc à notre petit programme console pour ajouter un petit article à notre base de données pour vérifier le fonctionnement entre NHibernate, ActiveRecord et Oracle. Pour cela rajouter ces quelques lignes (remarquez au passage qu'elles ne méritent que peu d'explication tant celles-ci sont simples ;)) :

// 2° Création d'un article
Article monArticle = new Article();
monArticle.Auteur = "Eric";
monArticle.Titre = "Lorem ipsum ...";
monArticle.Descriptif = "
Pellentesque habitant [..] metus
";

monArticle.Save();

Si vous générez votre solution et que vous démarrez le projet console en débogage vous devriez obtenir ce genre d’état :
Dans notre application console, nous voyons ce que NHibernate génère en terme de SQL pour nous grâce a l’héritage de ActiveRecordBase, et la fonction Save(). Deux étapes sont nécessaires :

  • Récupération du numéro de séquence (SEQ_EBN_ARTICLES)
  • Requête d’insertion dans notre table Articles à l’aide de « parameters »

A ce niveau la, dans cette exemple ultra simple, NHibernate fait très bien son job, et même plus pour ma part, car je n’aurai pas pensé qu’il génèrerait une requête SQL avec l’utilisation des « parameters ».
Remarque : nous voyons les requêtes SQL car depuis notre fichier de configuration XML, nous avons précisé la balise < add key="show_sql" value="true" / > indispensable lors du développement (à la différence des environnements de production) pour vérifier l’exactitude de requêtes (index, paramètres …)

Un 1er parcours dans la base de données (mode console)

Maintenant que l'on sait comment rajouter des données, voyons un parcours simple. Grâce a ActiveRecordBase on a, à disposition la " fonction " FindAll qui nous retourne un tableau d'article. Utilisons ce tableau pour parcourir l'ensemble des articles de notre base de données.

//3° Parcours simple
foreach( var article in Article.FindAll() )
{
    Console.WriteLine(article.Id + " - " + article.Titre);
}

Console.ReadLine();

Conclusion :
Dans cette partie vous avez appréhendé la notion simple de NHibernate avec l'aide d'ActiveRecord ! Le mapping depuis vos classes à l'aide des attributs. Et la création de bout de code permettant d'ajouter et lire des données dans Oracle.
Vous allez donc maintenant entrer dans le vif du sujet qu'est la création du site web MVC en question grâce aux concepts vu précédemment. Nous allons également étendre certain concept tel que " Linq " et le principe de " Repository " (autrement dit, la séparation des couches).

Aucun commentaire:

Enregistrer un commentaire