Après quelques journées perdues investies pour bien faire les choses avec Silverlight et RIA Services, je pense être arrivé à construire quelque chose qui tient la route.
Voici donc quelques un des points qui me paraissent importants pour une application Silverlight avec RIA Services :
DomainDataSource caching.
Comme beaucoup d’entre vous, je pense qu’un système LOB doit pouvoir afficher les entités modifié par un utilisateur sur un autre.
Par défaut, le DomainDataSource cache les objets qu’il a déjà récupéré, il faut donc bien lui dire qu’il doit à nous aller les chercher, même si il est vrai la requête RIA appelé est la même…
Pour résoudre cela, il vous suffit de créer un objet ExtendedDomainDataSource qui va préciser à chaque chargement que vous voulez les dernière données et non celles en cache; bien sûr, vous pouvez changer cela et y inclure un booléen par exemple pour en changer le comportement à l’instanciation ou même pour chaque requête !
public class ExtendedDomainDataSource : DomainDataSource
{
public ExtendedDomainDataSource() : base()
{
this.LoadingData += new EventHandler<LoadingDataEventArgs>(ExtendedDomainDataSource_LoadingData);
}
void ExtendedDomainDataSource_LoadingData(object sender, LoadingDataEventArgs e)
{
e.LoadBehavior = LoadBehavior.RefreshCurrent;
}
}
Partager le DomainContext:
Dans un souci de performance, l’on devrait utiliser le DomainContext dans une clause using pour permettre a cet objet et tout ce qu’il a chargé de bien être disposé.
Malheureusement, quand on commence à charger une grappe d’objets, il n’est plus possible de le faire.
Le use case ici sera donc de charger un DomainContext par besoin, afin de s’assurer qu’il soit disposé lorsque l’on change d’utilisation ; Exemple :
Une liste d’article, une page de détails d’article :
la liste a un DomainContext,
la page de détails (et ses sous-écrans) ont un DomainContext.
Sharing DomainContext in the application for performance
