2010-01-05 2 views
2

Мне нужна помощь с запросом OOD.Консультирование по объектно-ориентированному дизайну

Скажем, у меня есть следующий класс Customer:

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

Это простой заполнитель для данных, связанных с клиентами. Далее идет CustomerFactory, который используется для извлечения клиентов:

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

Теперь, если бы я захотел написать подпрограмму с именем UpdateCustomer(Customer customer) может кто-то предложить, где я мог бы поместить этот метод?

Очевидно, что я не хочу использовать Customer класс, так как это было бы против SRP (Single Ответственность принципе), и я не вижу, как хорошая идея, чтобы присоединить метод к CustomerFactory класса, так как это только роль заключается в том, чтобы получить клиентов из базы данных.

Так что, похоже, мне нужен еще один класс, но я не знаю, как его назвать.

Cheers. Jas.

+0

Для справок в будущем - не было необходимости отмечать этот вопрос как сообщество wiki :-) – Justin

ответ

4

То, что вы назвали фабрикой, не является фабрикой. Это репозиторий.

A Factory управляет установкой различных классов, совместно использующих общий интерфейс или иерархию классов на основе некоторого набора параметров.

A Repository обрабатывает поиск и управление данными.

В Репозитории определенно есть метод UpdateCustomer(Customer customer), а также метод GetCustomer(int id).

+0

Ahh, отлично. Здесь я сделал вещи грязными для себя, назвав класс CustomerFactory, а не CustomerRepository. Это уже кажется лучше. –

0

Не будет ли ваша процедура UpdateCustomer размещена в вашем DAL (Data Access Layer). Вы должны определить класс для обработки вставок или обновлений в базу данных, а затем передать ему объект клиента.

Вы можете написать класс DAL для обработки всего этого, но я не вижу проблемы с его хранением в вашем классе CustomerFactory, хотя, как уже упоминалось, это не фабрика.

4

Вы находитесь здесь больше на пути к созданию репозитория . Сделайте что-то вроде этого:

public interface ICustomerRepository 
{ 
    Customer SelectCustomer(int id); 

    void UpdateCustomer(Customer customer); 

    void DeleteCustomer(int id); 

    void CreateCustomer(Customer customer); 
} 

Затем создать конкретные реализации этого интерфейса (интерфейс на самом деле просто потому, что это хорошая практика, чтобы программировать против интерфейсов - вы можете пропустить его, хотя, хотя я рекомендовал бы держать его) ,

+0

Удивительный совет +1! – JonH

Смежные вопросы