我想对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因为它的唯一作用是从数据库中获取客户。
所以看起来我需要另一个班级,但我不知道该命名是什么。
干杯。 雅各
答案 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类中的任何问题,尽管如上所述它并不是真正的工厂。