Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Oop 关于面向对象设计的建议_Oop - Fatal编程技术网

Oop 关于面向对象设计的建议

Oop 关于面向对象设计的建议,oop,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 CustomerFact

我想要一些关于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
类,因为这违反了SRP(单一责任原则),我也不认为将方法附加到
CustomerFactory
类是个好主意,因为它的唯一作用是从数据库中获取客户

看起来我需要另一个类,但我不知道该怎么命名

干杯。
Jas.

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

基于一组参数,处理共享公共接口或类层次结构的各种类的实例化

A处理数据的检索和管理


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

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


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

在创建存储库的过程中,您做得更多。这样做:

public interface ICustomerRepository
{
    Customer SelectCustomer(int id);

    void UpdateCustomer(Customer customer);

    void DeleteCustomer(int id);

    void CreateCustomer(Customer customer);
}

然后创建该接口的具体实现(该接口实际上只是因为它是针对接口编程的良好实践——尽管我建议您保留它,但您可以跳过它)。

啊,太好了。这就是我给自己命名CustomerFactory而不是CustomerRepository的地方。这似乎已经更好了。为了将来的参考,没有必要将这个问题标记为社区wiki:-)