关于面向对象设计的建议
我想要一些关于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。
你所谓的工厂根本不是工厂。这是一个存储库。
A Factory处理根据一些参数集共享通用接口或类层次结构的各种类的实例化。
A Repository处理数据的检索和管理。
存储库肯定会有UpdateCustomer(Customer customer)
方法以及GetCustomer(int id)
方法。
啊,很好。这是我通过命名类CustomerFactory而不是CustomerRepository而使事情变得泥泞的地方。这似乎更好。 – 2010-01-05 16:03:07
您的UpdateCustomer例程不会放在您的DAL(数据访问层)中。您应该定义一个类来处理对数据库的插入或更新,然后将一个客户对象传递给它。
您可以编写DAL类来处理所有这些,但我没有看到将它存储在您的CustomerFactory类中的任何问题,虽然如前所述它不是真正的工厂。
你在创建存储库的方式上更少。做这样的事情:
public interface ICustomerRepository
{
Customer SelectCustomer(int id);
void UpdateCustomer(Customer customer);
void DeleteCustomer(int id);
void CreateCustomer(Customer customer);
}
然后创建这个接口的具体实现(该接口是真的只是因为它是很好的做法,程序对接口 - 你可以跳过它,不过,虽然我会建议你把它) 。
真棒建议+1! – JonH 2010-01-05 16:08:12
为了将来的参考 - 没有任何需要将这个问题标记为社区wiki :-) – Justin 2010-01-05 16:07:50