Alors j'ai eu un débat avec mon collègue sur WCF RIA Services, et exactement combien de données que nous envoyons au client dans une demande donnée. Voici la configuration:.Net Services WCF RIA: Pour faire la page ou ne pas faire la page? et combien de données pour envoyer le tuyau
Nous créons une application de reporting dans Silverlight et saisir des données d'un service WCF RIA pour remplir différentes grilles et des graphiques. Nous avons deux idées différentes sur la façon de mettre en œuvre le service. Il y a quelques mises en garde qui sont importantes pour prendre cette décision.
Avertissement 1: Un "rapport" peut être n'importe quel nombre de tables/diagrammes, mais très probablement composé de seulement quelques uns chacun.
Avertissement 2: La taille maximale d'une table de données peut être de milliers de lignes.
Avertissement 3: Certaines tables contiendront plus de 50 colonnes (pas notre idée ...). Les utilisateurs auraient besoin de la possibilité d'afficher des colonnes de masquage, car honnêtement, qui pourrait assimiler autant de données à la fois?
Nous avons deux idées différentes:
Créez un
Data Contract
pour chaque table/tableau et une méthode de serviceGetTableX()/GetChartX()
distinct pour chacun. Nous utiliserions un service de domaine pour cela, donc le filtrage/tri/pagination pourrait être géré sur le serveur, et seulement un certain nombre d'objets seraient retournés.Parce qu'un « rapport » pourrait contenir
n
tableaux/graphiques, cela signifie l'envoi de demandesn
chaque fois qu'unReport
est chargé, et une demande supplémentaire pour chaque page sur une table. Le service serait également un peu verbeux, 15 rapports (qui vont inévitablement croître), avec peut-être 3-5 méthodes par rapport pourrait signifier 45 à 75 méthodes. Étant donné que les utilisateurs peuvent masquer certaines colonnes et que certaines d'entre elles seront masquées par défaut, une quantité importante de données peut être envoyée au client et non à un événement. Pour autant que je sache, il n'y a pas moyen de limiter ceci avec unDomainService
.Créez un objet
Report
pour chaque rapport, avec un ensemble de grilles/diagrammes, ainsi que les données de chaque graphique/table, filtrés selon des critères universels pour chaque rapport. Sérialiser et renvoyer l'objet de rapport au client, en laissantSilverlight
gérer la pagination/le tri/le filtrage. Cela signifierait beaucoup moins de requêtes vers le serveur, mais la charge utile du message serait également plus importante. Je ne suis pas sûr, car je n'ai pas étudié assez, mais nous aurions probablement à creuser profondément dansWCF RIA Services
pour que cela fonctionne, ou nous ferions mieux de raclerRIA
et de faire notre propre chose au-dessus deWCF
. Cependant, cela nous donnerait la possibilité de choisir quelles colonnes doivent être envoyées au navigateur dans le scénario hide/show columns, ce qui réduirait la charge utile globale sur toute la ligne.
tl; dr = Est-il préférable d'envoyer toutes vos données à travers le fil une fois, ou à la page il?
Il semble que la réponse dépend fortement de la quantité de données, mais comment les gars pensez-vous de cette décision?
Combien de données faut-il envoyer dans une requête? Quand la radiomessagerie devient-elle plus efficace? ou au moins superficiellement plus efficace pour l'utilisateur? **
D'un point de vue commercial, quand est-il préférable d'utiliser simplement les outils intégrés plutôt que de rouler les vôtres. Supposons que votre propre serait plus efficace, comment pesez-vous la valeur de cette efficacité contre le travail supplémentaire?