2010-04-28 5 views
8

[Disclaimer: Je suis développeur ASP.NET MVC]Silverlight 4 WCF RIA Services et MVVM est pas aussi simple

Salut,

Je cherche des meilleures pratiques avec la mise en œuvre modèle MVVM avec WCF RIA en Silverlight 4.

Je ne cherche pas à utiliser MEF pour localiser des IoC mes ViewModels. Ce que je voudrais savoir, c'est comment appliquer un pattern MVVM avec Silverlight 4 et WCF RIA.

Je ne veux pas utiliser d'autres outils comme Prism ou MVVM Light. J'ai trouvé de nombreux exemples sur Internet montrant à quel point il est merveilleux de glisser-déposer une source de données sur la vue et que le travail est fait (cela me rappelle mes premiers développements VB6).

J'ai essayé de mettre en œuvre MVVM avec WCF RIA et ce n'est pas strightforward du tout. Si je comprends bien, le MVVM devrait contenir toute la logique pour pouvoir le tester isolément, mais quand il s'agit de le combiner avec WCF RIA c'est une autre histoire. J'ai les questions suivantes. Puis-je utiliser une métadonnée générée comme modèle?

  1. Puis-je utiliser une métadonnée générée comme modèle? Il serait plus facile de l'utiliser que si j'écris tous à partir du zéro.

  2. Comme je l'ai vu la seule façon que je pouvais obtenir des données est par DomainContext ou par liaison directe dans la vue (de locale ressource). Je ne veux pas la liaison directe dans la vue, pas testable du tout. Par contre je ne peux pas utiliser DomainContext, ça n'expose pas une seule entité !!! Tout ce que j'ai est l'EntitySet que je peux lier à DataGrid. Comment lier une entité unique au DataForm à partir du ViewModel?

  3. Comment puis-je udpate le modèle à la base de données?

  4. Comment naviguer d'une entité à une collection de c'est des articles. Par exemple, si j'ai une Entité d'Entreprise, je voudrais montrer un DataForm pour mettre à jour une information d'entité et un DataGrid pour montrer les adresses d'entreprises. Lors de la sauvegarde d'un formulaire, je souhaite enregistrer une information à la Société et une information à renseigner sur l'adresse qui a été sélectionnée comme active.

S'il vous plaît aidez-moi à comprendre comment bien le faire. Ou peut-être que je devrais laisser tomber la WCF RIA et le faire avec WCF à partir de zéro?

Qu'en pensez-vous?

Répondre

9

Vous pourriez être intéressé par cet session. Il explique comment utiliser le modèle MVVM avec les services RIA WCF.

+0

recommande vivement de regarder l'exemple de code 'BookClub' de cet article. en a beaucoup appris –

4

Quelques réponses au hasard ...

Je ne pense pas que MEF est particuarly bien adapté pour Silverlight. C'est principalement pour les applications de bureau, et pourrait être adapté pour d'autres utilisations où les plug-ins sont dans le système de fichiers local par rapport à l'application.

MVVM nécessite que vous compreniez les rôles. La "vue" est votre code XAML et code-behind. Le code-behind devrait gérer les événements du contrôle de l'utilisateur, mais très peu plus que cela.

Le ViewModel contient les données auxquelles le contrôle utilisateur se liera. Généralement, ViewModel est lié à la vue en tant que son DataContext, de sorte que tout le contenu du formulaire peut être lié aux propriétés du ViewModel. ViewModel doit implémenter INotifyPropertyChanged et déclencher des événements de modification de propriété pour chaque propriété à laquelle la fiche de données de formulaire.

Vous voudrez probablement créer une ObservableCollection en utilisant un EntitySet comme source. Cela gérera INotifyCollectionChanged à des fins de liaison de données. Si les entités de EntitySet gèrent également INotifyPropertyChanged, alors vous êtes en bonne forme lors de la liaison de données pour les collections.

Vous pouvez créer une propriété pour une entité individuelle et une base de données, en supposant que la notification de modification est également implémentée (à la fois pour les membres d'entité et pour la propriété d'entité). Les services RIA régénéreront le DomainContext sur chaque build, ce qui aide un peu à le synchroniser. Toutefois, il s'agit d'une couche de service au-dessus d'un ORM, de sorte que votre mappage de données ORM ou d'autres données devra toujours être maintenu par d'autres moyens.

Je n'ai pas regardé la version finale des services RIA, mais je n'ai pas été très impressionné par la version bêta. Je préfère avoir de bonnes classes d'entités définies sur le serveur et les partager avec le projet Silverlight. Ce n'est pas facile à configurer, cependant, et nécessite un WCF non trivial qui ne repose pas sur les références de service. (La version finale de RIA Services peut en avoir nettoyé certaines, mais la référence de service WCF natif dans Silverlight est plutôt mauvaise, principalement parce qu'elle ne recompose pas automatiquement les classes générées, et elle code en dur l'URI pour le service côté serveur.

Les métadonnées étaient un autre problème avec la version bêta de RIA Services. Il est plus facile d'attacher des attributs de métadonnées directement à votre classe DataContract et aux propriétés DataMember individuelles, si vous contrôlez la source de l'entité. Encore une fois, cela peut signifier ne pas utiliser les services RIA. L'écriture d'une classe de métadonnées distincte, comme cela était requis pour la version bêta RIA, n'était pas une bonne solution. J'ai fini par ne pas utiliser RIA Services pour Silverlight 3, et je ne l'ai pas regretté. Voici un excellent article on WCF and Silverlight. Bien qu'il soit indiqué Silverlight 2, il est toujours sur la cible pour toute version de Silverlight.

Je recommande MVVM Light. Source est disponible sur Codeplex, si c'est un problème. Il fournit un support de messagerie et de commande, ainsi qu'un ViewModelLocator; alors que ce dernier prend un peu de travail à comprendre, c'est vraiment une bonne extension du modèle MVVM de base.

Hope this helps .....

+0

Il y a aussi un bon exemple d'applications commerciales en cours d'exécution utilisant MVVM et WCF RIA. Regardez ici: http://intersoftpt.wordpress.com/2010/06/29/clientui-part-5-the-supercharged-silverlight-navigation/ –

2

Je pensais juste que je vous informer d'un projet sur lequel je travaille - juste obtenu notre première version fait. Fournit un moyen simple et pratique d'approcher MVVM pour les services Silverlight + RIA. Simplifie beaucoup de choses MVVM, et fournit des fonctions similaires à celles du contrôleur avec la classe Notifications. http://slmvvms.codeplex.com/

Questions connexes