Sébastien Pertus
Olymars : Industrialisation
Comment utiliser Olymars et l’intégrer en tant que process d’intégration continue lors de la réalisation d’un prototype.
Par Sébastien Pertus publié le 24/11/2008 à 17:18, lu 3104 fois, 6 pages
 4 | Addin Olymars
Olymars permet de facilement surenchérir les méta datas provenant de SQL Server, que ce soit au niveau des tables, colonnes ou encore procédure stockée.
Nous utilisons ce système pour améliorer la génération de notre code.
Trois exemples concrets d’utililsation :
Premier exemple  : Dans notre architecture WCF, nous utilisons ce système pour renseigner l’ensemble des namespaces qui correspondent à la génération d’une entité provenant du résultat d’une procédure stockée :
Une procédure Stockée ClientType_Select doit nous donner :
  • Une entité ClientType
  • Une collection ClientTypes
  • Une interface IClientTypeService
  • Un service ClientTypeService
  • Un proxy ClientTypeProxy
  • Et .. une couleur de fond de notre interface winforms !
 
/content/a5af2720-8219-479d-bd0a-7db32c20c3e3/image7.png
 
Deuxième exemple  : Nous voulons associer une colonne provenant du résultat de la procédure stockée à un bloc de type TextBox ou encore Calendar, voir son typage et même son libellé à afficher :
 
/content/a5af2720-8219-479d-bd0a-7db32c20c3e3/image8.png
 
Troisième exemp l e : L’association de cet entité avec les procédures stockées qui serviront à faire la mise à jour ainsi que la suppression, voir la sélection d’un sous groupe d’entité (dans ce cas via un champ XML, mais nous avons déjà fait évoluer le template pour prendre en compte les TVP sous SQL SERVER 2008)
 
/content/a5af2720-8219-479d-bd0a-7db32c20c3e3/image9.png
 
Tous ces renseignements sont présents dans les propriétés étendues de notre procédure stockée :
 
/content/a5af2720-8219-479d-bd0a-7db32c20c3e3/image10.png
 
Lors de la génération de code, la lecture des ces informations nous permettra de générer le code en conséquence.
Si vous êtes familier avec Olymars, le plugin que nous avons développé est une assembly implémentant une interface IOlymarsAddin, permettant de l’utiliser depuis Olymars.
Pouvoir lancer notre plugin sans forcément passer par Olymars, faisait aussi parti de nos prérogatives : Nous avons donc rajouter un simple projet console qui se charge de lancer le plugin « à la volée ».
 
/content/a5af2720-8219-479d-bd0a-7db32c20c3e3/image11.png
 
Note  : Olymars génère un cache de l’ensemble des données provenant de la base de données. Pour des petites bases contenant peu de données (en terme de méta datas) la génération est relativement rapide, mais pour de grosses bases (ce qui fut notre cas) la re génération peut prendre parfois beaucoup de temps.
Nous avons donc mis en place un système de résolution de cache : Celui-ci est invalidé à la demande :
 
/content/a5af2720-8219-479d-bd0a-7db32c20c3e3/image12.png
 
Pour ce faire, 2 méthodes sont présentes dans le SDK Olymars : Serialize et DeserializeApplicationObject :

if (new FileInfo(applicationBin).Exists)

{

    Console.WriteLine();

    Console.WriteLine("Serialized file already exist,");

    Console.Write("Do you want to re-serialize application object ? [y/n] ");

 

    ConsoleKeyInfo cKI = Console.ReadKey();

    serialize = (cKI.Key != ConsoleKey.N);

}

 

source = new Olymars.Executor.Source(true, false, DateTime.Now, 1993);

 

if (serialize)

{

    Console.WriteLine();

    Console.WriteLine("Please wait during serialization...");

 

    application = Application.Connect(connectionString, source);

    application.Serialize(applicationBin);

}

else

    application = Application.DeserializeApplicationObject(applicationBin, source);

En pratique, les données sont à re-sérializer surtout lorsque les propriétés étendues ont évolué, voir une table rajoutée / modifiée.
Pour une re-génération complète, si rien n’a été modifié dans la structure, inutile de re sérialiser l’ensemble de l’arbre.
 
» Démarrer une discussion