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

Présentation

  • : 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 01:43
Code Fluent - Initiation

Code Fluent est une solution développée par des experts .NET   (Soft Fluent)

une série d’articles pourraient être postés car je vais étudier plus en profondeur les possibilités offertes
J’utilise ici mon classique exemple gestion de contacts très simple pour bien comprendre
1 – définition des fichiers Xml
2 tables/classes : Contact et ContactCategory
CFContacts .xml
<cf:project xmlns:cf="http://www.softfluent.com/codefluent/2005/1"
                  xmlns:cfpc="http://www.softfluent.com/codefluent/producers.cache/2005/1"
                  defaultNamespace="CFContacts"
                  persistencePropertyNameFormat="{1}"
                  defaultKeyPropertyTypeName="int">
 <!-- inclut le fichier CFContactsProducerAll.xml -->
 <cf:import path="CFContactsProducerAll.xml" />
 <!-- definition de 2 entités -->
 <Contact>
    <Id/>
    <ContactName/>
    <ContactFirstName/>
    <ContactAge typeName="int"/>
    <ContactBirth typeName="datetime"/>
    <ContactCategory typeName="ContactCategory"/>
 </Contact>
 <ContactCategory>
    <Id/>
    <ContactCategoryLabel/>
 </ContactCategory>
</cf:project>
 
CFContactsProducerAll.xml 
seront générés :
- la base de données SQL ServerCFContacts  avec tables,relations,procédures stockées,...
- les classes du projet Visual Studio
<cf:project xmlns:cf="http://www.softfluent.com/codefluent/2005/1"
      defaultNamespace="CFContacts">
 <cf:producer typeName="CodeFluent.Producers.SqlServer.SqlServerProducer, CodeFluent.Producers.SqlServer">
    <cf:configuration
                  targetDirectory="c:/Target/Persistence"
                  connectionString="server=.;database=CFContacts;Integrated Security=true">
    </cf:configuration>
 </cf:producer>
 <cf:producer typeName="CodeFluent.Producers.CodeDom.CodeDomProducer, CodeFluent.Producers.CodeDom">
    <cf:configuration
                  targetDirectory="c:/Target/Model"
                  outputName="CFContacts.Model.dll">
    </cf:configuration>
 </cf:producer>
</cf:project>
 
 
2 – Génération
Lancer CodeFluent command prompt  .. Puis ..
CodeFluent.Build <chemin vers fichier.xml>
Dans mon cas
CodeFluent.Build  « C:/Documents and Settings/romagny/Mes documents/Visual Studio 2005/Projects/CFContacts/CFContacts.xml »

CodeFluent2.JPG

CFContacts.JPG 
3- projet
Ajouter soit la dll générée du projet soit les classes
+ Ajouter une référence à la dll CodeFluent.Runtime.dll (présent dans le répertoire d’installation de CodeFluent)
Premier constat : nous avons des classe collections et des classes unitaires 
Celles ci s'occupent (en une seule et même classe) à la fois 

>> de l'accès à la base de données via des méthodes static (les classes collections retournant des collections,les classes unitaires des instances)
>> du filtre et du trie des objets métiers
De plus Code Fluent dispose de son propre language de requetage le CFQL
exemple :
public CFContacts.Contact GetItem(int id)
        {
            if ((id == -1))
            {
                throw new System.ArgumentNullException("id");
            }
            CFContacts.Contact i = ((CFContacts.Contact)(this.BaseTable[id]));
            return i;
        }
 
public static System.Data.IDataReader PageDataLoadAll(CodeFluent.Runtime.PageOptions pageOptions)
        {
            CodeFluent.Runtime.CodeFluentPersistence persistence = CodeFluentContext.Get(CFContacts.Constants.CFContactsStoreName).Persistence;
            persistence.CreateStoredProcedureCommand("Contact_LoadAll");
            if ((pageOptions != null))
            {
                System.Collections.IEnumerator enumerator = pageOptions.OrderByArguments.GetEnumerator();
                bool b;
                int index = 0;
                for (b = enumerator.MoveNext(); b; b = enumerator.MoveNext())
                {
                    CodeFluent.Runtime.OrderByArgument argument = ((CodeFluent.Runtime.OrderByArgument)(enumerator.Current));
                    persistence.AddParameter(string.Format("@_orderBy{0}", index), argument.Name);
                    persistence.AddParameter(string.Format("@_orderByDirection{0}", index), ((int)(argument.Direction)));
                    index = (index + 1);
                }
            }
            System.Data.IDataReader reader = CodeFluentContext.Get(CFContacts.Constants.CFContactsStoreName).Persistence.ExecuteReader();
            return reader;
        }
 
ClassDiagram1-copie-1.jpg
Partager cet article
Repost0

commentaires