2009-11-08 2 views
1

Je me bats pour décider d'une bonne façon de structurer mon modèle d'objet/services Web dans une webapp je travaille. Nous avons un problème commun où différentes pages ont besoin d'une vue légèrement différente d'un objet standard. Par exemple, nous avons des types d'équipe et d'organisation dans lesquels une organisation peut avoir des équipes un-à-plusieurs. Sur une page tout ce que je besoin est quelque chose commeQuel est un bon moyen de structurer mon modèle d'objet webapp?

class Team { 
    long TeamID { get; set; } 
    string Name { get; set ;} 
    TeamType TeamType { get; set; } 
} 

Mais dans une autre page je besoin d'une projection différente des données telles que

class Team { 
    long TeamID { get; set; } 
    string Name { get; set ;} 
    string OrganizationName { get; set; } 
    string TeamPicture { get; set; } 
} 

Souvent, la projection d'un objet couvre plusieurs tables. Ma pensée est qu'il est mauvais d'interroger et de transmettre TOUTES les données pour une équipe et une organisation, puis d'utiliser simplement les parties dont j'ai besoin sur la page. Il semble que je vais me retrouver avec d'énormes quantités de données inutiles étant interrogées et circulant dans le système.

Mon modèle actuel est de créer des types distincts pour chaque projection. J'aime le type de sécurité mais le problème que je rencontre est que j'ai des types comme Team, SimpleTeam, TeamAndOrganization, etc. J'utilise l'équipe/organisation comme exemple, mais je trouve le même problème avec beaucoup de différents types dans mon système.

Comment gérez-vous cela? J'utilise WCF pour transmettre des données entre la webapp et un système back-end.

Répondre

2

Bien que je pense en général modèle-per-view est une bonne façon d'aller, je serais un peu inquiet à ce sujet dans le cadre d'un service. Idéalement, vous aimeriez que votre service soit plus général, je pense que vous n'obtiendrez pas une explosion de méthodes, une par vue. Généralement, je suis prêt à fournir un peu plus de données que nécessaire si cela signifie que je peux rendre mon service plus général. Dans mon cas, j'ai différents types de clients (mobile par rapport à une application web standard) et ils obtiennent généralement les mêmes données, mais l'application mobile utilise un sous-ensemble réduit. Dans ce cas, je ne fournis pas de modèles distincts, mais l'application mobile n'utilise simplement pas certaines données.

+0

Il ne certainement conduire à une explosion des méthodes de service, ce qui est terrible. Suis-je trop préoccupé par perf/scalabilité dans mon inquiétude à propos de données supplémentaires flottant autour. Le produit se vend bien, nous avons progressivement augmenté notre base d'utilisateurs. Si nous continuons notre cours, nous verrons plus de 1000 utilisateurs simultanés l'année prochaine. – AgileJon

+0

Vous devez trouver un équilibre entre performance et maintenabilité. En général, j'irais avec la maintenabilité jusqu'à ce que les performances deviennent un problème, puis refactoriser au besoin pour améliorer les performances. – tvanfosson

+0

Wow, il semble que peu importe combien de fois je lis/entends cette idée générale (l'optimisation prématurée est la racine de tous les maux), elle ne résonne pas dans mes conceptions. Je vous remercie! – AgileJon

0

Je n'attacher votre modèle d'objet à une page vue. Une fois que vous faites cela, il est difficile ou impossible de changer vos pages. C'est un couplage subtil entre les couches qui devrait être évité.

Peut-être qu'il est possible de filtrer les données qui se termine au niveau du client. L'évaluation paresseuse de la base de données peut également aider.

+0

Depuis que j'ai séparé la webapp de la base de données avec les services Web, l'évaluation paresseuse de la base de données ne semble pas être une option. J'espérais obtenir plus de réutilisation de mes 'projections' mais je n'ai pas vu grand chose (ie: tu es mort sur le couplage). Cependant, il semble que cela rend la modification d'une page plus facile que plus difficile. Je n'ai pas à m'inquiéter des effets secondaires sur les autres pages car ils utilisent tous leur propre projection des données. – AgileJon

+0

Que se passerait-il si votre interface Web disparaissait entièrement, remplacée par une interface Flash ou Flex, ou si vous décidiez d'ajouter une interface mobile parallèle et plus simple? Comment votre design traiterait-il de ces changements? – duffymo

+0

Ce serait une énorme douleur! J'ai mal compris ce que vous entendiez par difficile/impossible de "changer" de pages. Je pensais juste à peaufiner mes pages existantes. – AgileJon

Questions connexes