传递对象、继承对象或使用直接方法

本文关键字:对象 方法 继承 | 更新日期: 2023-09-27 18:27:19

我是C#和OOP场景的新手,正在构建一个基础设施,帮助我更好地理解OOP概念。这是我做的一个项目,用来测试我的课堂知识。有人能介绍一下吗,并向我解释什么是更好的方法以及为什么?

以下是我的C#程序中的对象:

  • deskClerk[具有返回Customer对象的addCustomer方法。]
  • 订单
  • 股票
  • 客户
  • 公用事业
  • 展厅[包含客户、库存和订单列表-所有列表私有的展厅也有addCustomer方法]

我希望deskClerk对象将Customer添加到Showroom对象中。为此,我有以下选择:

  1. 我可以将展厅对象传递给桌上办事员,然后使用在Showroom中的addCustomer方法来添加Customer
  2. 我可以直接将Customer添加到Showroom,因为Showroom对象已经有addCustomer方法
  3. 我可以从Showroom继承deskClerk对象,在这种情况下deskClerk可以使用addShowroom的Customer方法

我的问题是:

  • 以上三个选项中哪一个有合理的逻辑
  • 展厅是否应该有addCustomer方法?展厅应该只是库存、客户和订单列表的存储对象,对吗

传递对象、继承对象或使用直接方法

您必须弄清楚客户是否可以在不参与展厅的情况下存在,以及DeskClerk是否可以在没有参与展厅的条件下四处走动。

如果是这样的话,我会做一些类似的事情

public class Showroom {
    public DeskClerk Clerk { get; private set; }
    public List<Customer> Customers { get; set; }
    [...]
}

如果没有展厅,前台职员就没有多大用处,所以将展厅设置为其构造函数中的一个依赖项:

public class DeskClerk {
    private ShowRoom { get; set; }
    public DeskClerk(ShowRoom showRoom) {
        ShowRoom = showRoom;
    }
    public Customer AddCustomer(Customer customer) {
        //do stuff with customer object
        ShowRoom.Add(customer);
        return cutomer;
    }
}

不认为有两个位置来添加客户是正确的,但服务台职员仍有责任这样做。

然而,可能误解了你的问题:-)希望它能有所帮助!

我喜欢你解决这个问题的方法。阅读您的问题:

  • 每个选择都有一个合理的逻辑,因此您的选择取决于
    如何构建对象以及如何使用它们。作为一名程序员,我建议你使用第二个或第三个。

  • 是的,展厅可以有一个addCostumer方法,在这种情况下,如果你想使用第二个或第三个选项,那么如果你想在存储中添加一个Costumer,它必须有一个addCostumer的方法。

使用第三个选项这里是我的示例代码:

class Stock { /*...*/ }
class Customer { /*...*/  }
class Order { /*...*/  }
class Showroom
{
    protected List<Stock> StockList;
    protected List<Customer> CustomerList;
    protected List<Order> OrderList;
    public Showroom()
    {
        StockList = new List<Stock>();
        CustomerList = new List<Customer>();
        OrderList = new List<Order>();
    }
    public virtual void addStock(Stock stock)
    {
        StockList.Add(stock);
    }
    public virtual void addCustomer(Customer customer)
    {
        CustomerList.Add(customer);
    }
    public virtual void addOrder(Order order)
    {
        OrderList.Add(order);
    }
    //...
}
class deskClerk : Showroom
{
    public deskClerk()
    {
        CustomerList = new List<Customer>();
    }
    public override void addCustomer(Customer customer)
    {
        CustomerList.Add(customer);
    }
    //...
}

所以我可以给你推荐另一件事:

每次你使用对象时,都会给每个对象赋予他的角色和任务,然后每个选择都取决于你想要使用的逻辑。选择一个你认为有效并且适合你想要使用它的环境的。