2010-01-05 8 views
2

Je voudrais de l'aide avec une requête OOD.Conseiller sur la conception orientée objet

Dire que j'ai la classe Customer suivante:

public class Customer 
{ 
    public int Id { get; set; } 
    public string FirstName { get; set; } 
    public string LastName { get; set; } 
} 

Il est un espace réservé simple pour les données relatives à la clientèle. Vient ensuite la CustomerFactory, qui est utilisé pour récupérer les clients:

public static class CustomerFactory 
{ 
    public static Customer GetCustomer(int id) 
    { 
     return null; // Pretend this goes off to get a customer. 
    } 
} 

Maintenant, si je voulais écrire une routine nommée UpdateCustomer(Customer customer) quelqu'un peut suggérer où je pourrais placer cette méthode?

Il est évident que je ne veux pas utiliser la classe Customer car ce serait contre SRP (responsabilité unique Principe), aussi je ne vois pas cela comme une bonne idée de fixer la méthode à la classe CustomerFactory, car il est seulement Le rôle est d'obtenir des clients de la base de données.

Donc, il semble que je vais avoir besoin d'un autre cours, mais je ne sais pas comment le nommer.

Cheers. Jas.

+0

Pour référence future - il n'y avait pas besoin de marquer cette question comme wiki de la communauté :-) – Justin

Répondre

4

Ce que vous avez appelé une usine n'est pas une usine du tout. C'est un référentiel.

Un Factory gère l'instanciation de diverses classes partageant une interface commune ou une hiérarchie de classes basée sur un ensemble de paramètres. Un Repository gère la récupération et la gestion des données.

Le référentiel aurait définitivement la méthode UpdateCustomer(Customer customer) ainsi que la méthode GetCustomer(int id).

+0

Ahh, super. C'est là que j'ai rendu les choses boueuses pour moi-même, en nommant la classe CustomerFactory, plutôt que CustomerRepository. Cela semble déjà mieux. –

0

Votre routine UpdateCustomer ne serait-elle pas placée dans votre couche DAL (Data Access Layer). Vous devez définir une classe pour gérer les insertions ou les mises à jour de la base de données, puis lui transmettre un objet client.

Vous pouvez écrire la classe DAL pour gérer tout cela, mais je ne vois aucun problème à l'enregistrer dans votre classe CustomerFactory, même si, comme mentionné, ce n'est pas vraiment une usine.

4

Vous êtes plus sur moins sur la façon de créer un Repository. Faites quelque chose comme ceci:

public interface ICustomerRepository 
{ 
    Customer SelectCustomer(int id); 

    void UpdateCustomer(Customer customer); 

    void DeleteCustomer(int id); 

    void CreateCustomer(Customer customer); 
} 

Ensuite, créez des applications concrètes de cette interface (l'interface est vraiment juste parce qu'il est bon de programmer contre interfaces - vous pouvez l'ignorer, cependant, bien que je vous recommande de le garder) .

+0

super conseils +1! – JonH

Questions connexes