Vue de classe (model)

De Wiki1000
Version du 9 avril 2013 à 11:26 par Syfre (discuter | contributions)
(diff) ← Version précédente | Voir la version courante (diff) | Version suivante → (diff)

Sommaire

Introduction

Les vues de classe sont l'équivalent objet des vues SQL.

Une vue de classe présente les caractéristiques suivantes :

  • Elle représente une vue d'une classe existante, généralement persistante, appelée classe principale.
  • Les attributs d'une vue puvent être soit des attributs non persistants soit des alias sur les attributs de la classe principale.
  • Les alias d'attribut peuvent parcourir les références de la classe principale.

Le principal avantage des vues est que lors du chargement des objets d'une vue le framework effectuera une seule requête contenant les jointures sur toutes les tables nécessaires selon les références définies dans les alias de la vue.

Info-20px.png Note : En général une jointure correspond à un rôle

Filtre sur les vues

Les filtres posés sur une vue doivent être définis par rapport aux attributs de la vue mais peuvent contenir des termes relatifs à la classe principale de la vue.

version650-32x32.png Un filtre sur une vue peut faire référence à la pseudo référence "main" pour forcer l'utilisation d'un attribut de la classe principale, ceci peut être utile si la vue redéfinit un rôle de la classe principale et que l'on désire utiliser le rôle dans le filtre.

Droit sur une vue

Les droits pris en compte pour une vue sont :

  • Les droits posés sur la vue.
  • Si la vue n'a pas de droits définis les droits définis sur la classe principale.
Tip-20px.png Tip : Evitez de définir des droit sur une vue mais définissez les droits sur la classe principale.

version650-32x32.png Propriétés avancées d'une vue

image-1.png

  • Clé primaire
Lorsqu'une vue comporte des agrégats, chaque objet de la vue correspond à un ensemble d'objets de la classe principale; dans ce cas il est nécessaire de définir un attribut clé primaire pour identifier de façon unique une instance de la vue.
Tip-20px.png Tip : Ce n'est pas le cas lorsqu'il s'agir d'agrégats sur un rôles liste
  • Eliminer les doublons
Cette option permet d'inclure un DISTINCT dans la clause SELECT de sorte que seules les lignes de combinaisons uniques des colonnes soient retournées. Dans ce cas il est nécessaire de définir une clé primaire car les identifiants des lignes correspondantes ne sont pas retournés.
  • Ordre de tri
Cet attribut peut être utilisé pour ordonner les instances de la vue.
  • Expression Where
Ce filtre, appliqué uniquement en SQL, peut être utilisé pour filtrer les instances de la vue. Il est ajouté systématiquement à toutes les requêtes portant sur la vue.

version650-32x32.png Rôle sur une interface

image-5.png

Lorsque l'attribut de la vue est un alias d'un attribut d'une référence définie par une interface, il est nécessaire de définir quelle classe support de l'interface doit être utilisée par la vue. Ceci ce fait en qualifiant le rôle sur l'interface par le nom de la classe support.

Tip-20px.png Tip : vous devez qualifier chacune des utilisations de la référence sur l'interface.

version650-32x32.png Attributs agrégats

image-2.png

Lorsque l'attribut de la vue est un alias d'attribut numérique il est possible de définir un agrégat pour cet attribut.

Tip-20px.png Tip : Dans ce cas vous pouvez être obligé de définir une clé primaire pour la vue

version650-32x32.png Attributs agrégats de différence

Certaines fonctions d'agrégats opèrent sur une différence d'attribut, dans ce cas vous devez spécifier un second alias :

image-2a.png

version650-32x32.png Agrégats d'attribut de rôle liste

Les fonctions d'agrégat peuvent être utilisées sur les attributs d'un rôle liste.

Par exemple, si vous avez une relation maître / détail défini par un rôle liste vous pouvez faire une vue du maître qui retourne des valeurs agrégées des détails.

Dans cet exemple :

image-4.png

la vue expose un attribut qui est la différence des montants des objets détails, le code SQL généré par cette vue est :

select  TOP 100 t0.uneChaine "code",sum(t1.montant-t1.montant2) "montant",t0.oid "oid",t0.idOTP "idOTP",t0.UpdStamp "UpdStamp",t0.UpdDate "UpdDate",t0.UpdUser "UpdUser",t0.oid "oid" from dbo.WFCLASSEX t0
left outer join dbo.WFCLASSEXX t1  on t1.oidWFClasseXRef=t0.oid
group by t0.uneChaine,t0.oid,t0.idOTP,t0.UpdStamp,t0.UpdDate,t0.UpdUser,t0.oid
order by t0.uneChaine, t0.oid

version650-32x32.png Attributs de type date

image-3.png

Lorsque l'attribut de la vue est un alias d'attribut date/heure il est possible de définir un opérateur pour cette date de sorte d'obtenir une partie de la date.

Vue sur une interface

Il est possible de définir une vue sur une interface, dans ce cas vous devez préciser quelles classes concrètes seront utilisées dans la vue.

La vue réalise alors un union de toutes les classes concrètes.

image-6.png

Dans cet exemple la vue réalise un union des deux classes SupportInterface1 et SupportInterface2, la requête générée est celle-ci:

select  TOP 100 t0.unCode "unCode",t0.oid "oid",t0.idOTP "idOTP",t0.UpdStamp "UpdStamp",t0.UpdDate "UpdDate",t0.UpdUser "UpdUser",t0.oid "oid" from dbo.SUPPORTINTERFACE1 t0
UNION
select  TOP 100 t0.unCode "unCode",t0.oid "oid",t0.idOTP "idOTP",t0.UpdStamp "UpdStamp",t0.UpdDate "UpdDate",t0.UpdUser "UpdUser",t0.oid "oid" from dbo.SUPPORTINTERFACE2 t0
order by t0.UpdDate desc, t0.oid desc

ModèleDéveloppement DSM

Outils personnels