Overblog Suivre ce blog
Editer l'article Administration Créer mon blog

Présentation

  • : Romagny13 - Du .NET,du pur .NET
  • Romagny13 - Du .NET,du pur .NET
  • : Cycle de progression Faire (quelque chose qui marche) -> comprendre ce que l’on fait/comment cela marche -> pousser plus loin les notions
  • Contact

Recherche

Articles Récents

16 juillet 2007 1 16 /07 /juillet /2007 10:44
Premiers points sur Code Fluent

Points négatifs :
-          La gestion de la connexion à SQL Server  est trop transparente (gérée par CodeFluent.Runtime.dll), 
pas de fichier de configuration (app.config ou web.config)
-          De ce fait il est conseillé de nommer la base de données avec le même namespace utilisé, la chaine de connexion se basant dessus et étant générée dynamiquement
-          seul SQL Server est pris en charge (à l’heure actuelle, il ne me semble pas possible de se connecter à Access par exemple même si je mets le conditionnel-CodeFluent.Producers.SqlServer.dll)
-          un certains nombre de champs/properties (rowVersion,entityState,etc.) ainsi que pour la base de données, sont générés en « plus »,ce qui impose d’ajouter un peu de code si on ne désire pas qu’ils soient affichés (attribut        [System.ComponentModel.Browsable(false)])
-          un seul constructeur par défaut, on est obliger soit de le coder par soi-même soit définir chaque property une à une
-          les requêtes vers le server  sont parfois assez longues
 
Avantages :
-          c’est l’outil à l’heure actuelle qui m’a le plus impressionné par l’apport
-          la gestion des relations : on n’a non pas une clé étrangère mais la l’objet de la relation en lui-même)(relations 0..1,1..1)
-          un sytème de génération simple,très complet,et rapide
-          une seule dll à ajouter au projet, cela change d’Entreprise Library par exemple (personnellement j’aime que le code généré soit le plus proche possible de ce que j’aurais obtenu en tapant tout « à la main » et ne pas avoir « 50 » librairies à ajouter au projet, qui ne serviront pas forcément toutes ou très peu en comparaison)

>> http://www.softfluent.com/codefluent_features_fr.aspx

CodeFluentMethods.jpg
Méthodes pour charger
J’utilise toujours mon exemple de gestion de Contacts
>dans les classes Collections
           ContactCategory oContactCategory = ContactCategory.Load(3);
 
            // Methodes retournant un IDataReader
            IDataReader reader = ContactCollection.DataLoadAll();
            IDataReader reader = ContactCollection.DataLoadByContactCategory(oContactCategory);
            IDataReader reader = ContactCollection.PageDataLoadAll(null);
            IDataReader reader = ContactCollection.PageDataLoadByContactCategory(oContactCategory);
 
            // Methodes retournant une collection
            ContactCollection Contacts = ContactCollection.LoadAll();
            ContactCollection Contacts = ContactCollection.LoadByContactCategory(oContactCategory);
            ContactCollection Contacts = ContactCollection.PageLoadAll(1, 1);
 
 
>dans les classes « unitaires »
           // retournant un objet metier
            Contact oContact = Contact.Load(1);
            Contact oContact = Contact.LoadByEntityKey("1");
 
Ajout
>Classes collections
            Contact c = new Contact();
            c.ContactName = "Durand";
            c.ContactFirstName = "Paul";
            c.ContactAge = 50;
            c.ContactCategoryId = 1;
 
            bool result = ContactCollection.Insert(c);
           
>Classes unitaires
            Contact c = new Contact();
            c.ContactName = "Durand";
            c.ContactFirstName = "Paul";
            c.ContactAge = 50;
            c.ContactCategoryId = 1;
 
           bool result = Contact.Save(c);
 
Update
>Classes collections
           Contact c = Contact.LoadById(3);
            c.ContactName = "DUPONND";
            c.ContactFirstName = "Paul";
            c.ContactAge = 50;
            c.ContactCategoryId = 1;
 
            bool result = Contact.Save(c);
>Classes unitaires
            Contact c =Contact.LoadById(3);
            c.ContactName = "DUPOND";
            c.ContactFirstName = "Paul";
            c.ContactAge = 50;
            c.ContactCategoryId = 1;
 
           bool result = Contact.Save(c);
Delete
>Classes collections
           Contact c =Contact.LoadById(3);
            ContactCollection.Delete(c);
>Classes unitaires
           Contact c =Contact.LoadById(3);
            bool result = Contact.Delete(c);
 
 
Travail sur la couche métier puis mise à jour
On peut tout à fait travailler « en deconnecté » on pourrait dire, c'est-à-dire charger une collection,puis faire des ajouts,modification,suppression, et enfin faire la mise à jour vers la base de données,(un peu comme ce que l’on fait avec un DataSet), ce grâce à la gestion des etats(rowVersion ,entityState)
 
Exemple :
1 je charge la collection de contacts
2 j’ajoute un contact à la couche métier(c'est-à-dire donc la colllection)
3 je sauve les changements(le contact sera ajouté en base de données)
            ContactCollection Contacts = ContactCollection.LoadAll(); 
          
            Contact c = new Contact();
            c.Id = 5;// il faut definir la cle ici même pour une cle auto incrementée
            c.ContactName = "SCHACHT";
            c.ContactFirstName = "Eric";
            c.ContactAge = 30;
            c.ContactCategoryId = 1;
            Contacts.Add(c);
 
            Contacts.SaveAll();
 
Ce système parait certes intéressant, mais j’ai tendance à le fuir personnellement car on multiplie les chances de conflits lors de la mise à jour

Partager cet article

Repost 0

commentaires