建议面向对象的设计

时间:2010-01-05 15:58:02

标签: oop

我想对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(单一责任原则),我也认为将方法附加到{{1因为它的唯一作用是从数据库中获取客户。

所以看起来我需要另一个班级,但我不知道该命名是什么。

干杯。 雅各

3 个答案:

答案 0 :(得分:4)

你所谓的工厂根本就不是工厂。这是一个存储库。

A Factory根据一组参数处理共享公共接口或类层次结构的各种类的实例化。

Repository处理数据的检索和管理。

存储库肯定会包含UpdateCustomer(Customer customer)方法以及GetCustomer(int id)方法。

答案 1 :(得分:4)

您在创建存储库的过程中越来越少。做这样的事情:

public interface ICustomerRepository
{
    Customer SelectCustomer(int id);

    void UpdateCustomer(Customer customer);

    void DeleteCustomer(int id);

    void CreateCustomer(Customer customer);
}

然后创建这个接口的具体实现(接口实际上只是因为对接口进行编程是很好的做法 - 你可以跳过它,尽管我建议你保留它)。

答案 2 :(得分:0)

您的UpdateCustomer例程不会放在DAL(数据访问层)中。您应该定义一个类来处理对数据库的插入或更新,然后将客户对象传递给它。

您可以编写DAL类来处理所有这些,但我没有看到将它存储在您的CustomerFactory类中的任何问题,尽管如上所述它并不是真正的工厂。

相关问题