2009-07-23 9 views
8

Je suis nouveau à la mise en place de WCF, je l'ai dans mon projet, mais j'ai 5 différents 'services' dans mon projet WCF et je me demande si je fais la bonne chose . Mes services pour le moment sont 1-1 à mes tables de base de données. Je finis par avoir quelque chose comme:WCF un service ou plusieurs services

public class Projects : IProjects 
{ 
    public List<Project> GetAll() 
    { 
     return (from p in Connection.Data.Projects 
       select new Project {ID = p.id, Name = p.name}).ToList(); 
    } 

    public Project GetByID(int id) 
    { 
     return (from p in Connection.Data.Projects 
       where p.id == id 
       select new Project {ID = p.id, Name = p.name}).First(); 
    } 

    public Project AddProject(string name) 
    { 
     var project = new Data.Projects {name = name}; 
     Connection.Data.AddToProjects(project); 
     Connection.Data.SaveChanges(); 

     return new Project {ID = project.id, Name = project.name}; 
    } 

    public void DeleteProject(int id) 
    { 
     var project = (from p in Connection.Data.Projects 
         where p.id == id 
         select new Project {ID = p.id, Name = p.name}).First(); 

     Connection.Data.DeleteObject(project); 
     Connection.Data.SaveChanges(); 
    } 
} 

J'ai une classe similaire pour chacune des tables dans mon projet. Dois-je trouver un moyen d'utiliser une connexion de service avec des sous-classes ou la conserver en tant que classe de service par table?

Répondre

8

"Cela dépend!" :-) La réponse standard pour toutes les questions IT et de programmation :-)

Je ne vois rien de mal à avoir ces 5 services distincts - vous ne gagnez rien en les fusionnant tous en un seul grand service, Je dirais. Je préférerais les garder séparés et "lean'n'mean".

Si vous disposez de cinq services distincts, vous pouvez également gérer des éléments tels que des autorisations d'accès pour chacun séparément, par ex. laissez certains groupes d'utilisateurs utiliser un service, pas un autre.

Encore: Je pense que vous le faites très bien - je ne vois aucune raison impérieuse ou avantage d'avoir un énorme services contre cinq plus petits, plus agiles. En y réfléchissant, le seul vrai changement que je pourrais suggérer est d'essayer de concevoir vos services de sorte qu'ils soient plus proches de ce que votre application veut faire (c'est-à-dire les opérations que vous attendez de votre application et donc de vos services handle), plutôt que de les modéliser trop près de la base de données. Essayez de penser "orienté tâche" ou en termes d'opérations, plutôt que le magasin sous-jacent où ils vont stocker leurs données.

Marc

+1

génial, merci l'homme! –

+0

D'accord sur l'approche basée sur les tâches. Mieux vaut ne pas penser à un service en tant que référentiel mais plutôt à un contrôleur de cas d'utilisation IMO. Je soulignerais cependant que, bien que 5 services distincts soient probablement une meilleure encapsulation, cela augmente parfois les coûts de configuration/maintenance/déploiement. Pas toujours mais cela vaut la peine de garder à l'esprit. – Stimul8d

Questions connexes