2010-01-05 71 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(单一责任原则),我也不认为将该方法附加到CustomerFactory类是一个好主意,因为它只是角色是从数据库获取客户。

所以它看起来像我需要另一个类,但我不知道该如何命名它。

干杯。 Jas。

+0

为了将来的参考 - 没有任何需要将这个问题标记为社区wiki :-) – Justin 2010-01-05 16:07:50

回答

4

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

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

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

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

+0

啊,很好。这是我通过命名类CustomerFactory而不是CustomerRepository而使事情变得泥泞的地方。这似乎更好。 – 2010-01-05 16:03:07

0

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

您可以编写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 2010-01-05 16:08:12