2010-12-16 119 views
0

Je construis une application silverlight utilisant modèle MVVM mais je ne comprends pas ce que je suis absent ici ...coincé avec MVVM architecture Problème

  1. ViewsProject (application Silverlight) contient les contrôles utilisateur et page. Références ViewModelsProject. ViewModelsProject (bibliothèque de classes Silverlight) contient le code de vues dorsal.
  2. Aussi la logique métier résidera ici. Il référencera le projet Models.

  3. ModelsProject (bibliothèque de classes Windows) contient: le modèle d'entité Ado.net d'une base de données locale et un service DomainService WCF RIA basé sur le modèle d'entité. Son but est d'obtenir des données de la base de données locale et les entités sont exposées via le service de domaine.

  4. Projet Web: Contient xap de ViewsProject.

Est-ce que j'ai déjà tout fait correctement? Si oui, alors s'il vous plaît me aider à comprendre:

Comment puis-je appeler les méthodes du service de domaine dans le projet ViewsModel ? Si je référence le ModelsProject, j'obtiens l'erreur que seulement les projets silverlight peuvent être ajoutés. Si je change ModelsProject en projet de bibliothèque de classe silverlight alors je ne peux pas ajouter le modèle d'entité de ma base de données.

+1

MVVM ne dicte pas que vous devez séparer vos modèles ViewModels et vues dans des projets séparés. Ceux-ci peuvent tous vivre dans le même projet dans différents dossiers peut-être et encore atteindre un design MVVM. –

+0

la solution s'attend à se développer considérablement avec le temps, donc pour éviter les problèmes futurs, j'ai décidé de décomposer la solution en assemblages plutôt qu'en dossiers – InfoLearner

+1

Rendez-le facile en premier, et faites fonctionner l'application. Vous pouvez ensuite penser à la répartition entre plusieurs projets/assemblages. Je suis d'accord avec Aaron. – Jehof

Répondre

0

je travaillais la réponse.

Modifiez ViewModelsProject (bibliothèque de classes Silverlight) en type d'application Silverlight. Cochez Activer les services Ria lors de la création du projet.

Dans la classe de modèle de vue, ajoutez à l'aide de ModelsProject. Compilez le ViewModelsProject.Toutes les méthodes du service WCF Ria apparaîtront alors dans le code.

0

Il n'y a pas beaucoup de sens à séparer vos vues de vos viewmodels IMHO. J'ai vu cette approche utilisée auparavant, mais le modèle de vue (dans mon esprit au moins) représente une abstraction plus appropriée à la vue que ce que le modèle de domaine peut offrir. Le ViewModel fournit une couche d'indirection pour permettre à la présentation de changer sans que le modèle fasse la même chose mais c'est un peu plus qu'une sorte d'hybride adaptateur/contrôleur et vit à côté de la vue.

Pour répondre à votre question si ...

En règle générale, vous aurez votre projet SL appelez votre service de domaine (un service Web en général) par l'intermédiaire de votre commandant en vue de la viewmodel. La commande viewmodel effectuera alors directement ou indirectement l'appel de service Web. Ce service Web doit être et non besoin d'être une bibliothèque de classes SL car il se trouve sur le serveur web loin de votre client.

Je comprends ce que vous pensez d'une application de bureau ici. N'oubliez pas que le projet SL exécute le côté client et que vos données ne sont pas présentes. Pour câbler tout cela, vous aurez besoin d'un service à distance pour obtenir les données. Une référence de bibliothèque régulière n'est pas bonne car les données ne sont pas sur le client.

HTH, Stimul8d

+0

Je ne pense pas que vous ayez compris ma question. Ma question est simple: comment puis-je consommer le service WCF Ria de mon application Silverlight? – InfoLearner

+0

Peut-être changer le titre de la question puis cus ce n'est pas clair. La réponse de Daniel est probablement suffisante alors. – Stimul8d

1

Pour que les projets clients utilisent le service WCF RIA, vous devez définir le lien WCF RIA Services dans la propriété du projet. En ce qui concerne la modularité et la séparation dans l'architecture du projet lors de l'utilisation des services WCF RIA, , vous pouvez utiliser les bibliothèques de classes WCF RIA.

alt text