传递对象、继承对象或使用直接方法
本文关键字:对象 方法 继承 | 更新日期: 2023-09-27 18:27:19
我是C#和OOP场景的新手,正在构建一个基础设施,帮助我更好地理解OOP概念。这是我做的一个项目,用来测试我的课堂知识。有人能介绍一下吗,并向我解释什么是更好的方法以及为什么?
以下是我的C#程序中的对象:
- deskClerk[具有返回Customer对象的addCustomer方法。]
- 订单
- 股票
- 客户
- 公用事业
- 展厅[包含客户、库存和订单列表-所有列表私有的展厅也有addCustomer方法]
我希望deskClerk对象将Customer添加到Showroom对象中。为此,我有以下选择:
- 我可以将展厅对象传递给桌上办事员,然后使用在Showroom中的addCustomer方法来添加Customer
- 我可以直接将Customer添加到Showroom,因为Showroom对象已经有addCustomer方法
- 我可以从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);
}
//...
}
所以我可以给你推荐另一件事:
每次你使用对象时,都会给每个对象赋予他的角色和任务,然后每个选择都取决于你想要使用的逻辑。选择一个你认为有效并且适合你想要使用它的环境的。