Консультирование по объектно-ориентированному дизайну - PullRequest
2 голосов
/ 05 января 2010

Мне нужна помощь с запросом 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 (принципу единой ответственности), также я не считаю хорошей идеей присоединять метод к классу CustomerFactory поскольку его роль заключается только в том, чтобы получать клиентов из базы данных.

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

Приветствия. Иак.

Ответы [ 3 ]

4 голосов
/ 05 января 2010

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

public interface ICustomerRepository
{
    Customer SelectCustomer(int id);

    void UpdateCustomer(Customer customer);

    void DeleteCustomer(int id);

    void CreateCustomer(Customer customer);
}

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

4 голосов
/ 05 января 2010

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

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

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

В репозитории определенно будет присутствовать метод UpdateCustomer(Customer customer) и метод GetCustomer(int id).

0 голосов
/ 05 января 2010

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...