我是C#和OOP场景的新手,在构建基础架构的过程中,这将帮助我更好地理解OOP概念。这是我用来测试课堂知识的项目。有人可以回过头来向我解释什么是更好的方法,为什么?
以下是我的C#程序中的对象:
我希望deskClerk对象将一个Customer添加到Showroom对象。为此,我有以下选择:
我的问题是:
答案 0 :(得分:1)
如果客户可以在不参加陈列室的情况下存在,并且如果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;
}
}
不要认为有2个地方可以添加客户是正确的,但DeskClerk仍然有责任这样做。
然而,可能会误解您的问题:-)希望它有所帮助!
答案 1 :(得分:1)
我喜欢你解决问题的方法。所以阅读你的问题:
每个选项都有一个合理的逻辑,所以你的选择取决于你 如何构建对象以及如何使用它们。作为程序员,我建议您使用第二个或第三个。
是的,Showroom可以有一个addCostumer方法,在这种情况下,如果你想使用第二个或第三个选择,它必须有一个addCostumer方法,如果你想将一个Costumer添加到存储中。
使用第三个选择是我的示例代码:
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);
}
//...
}
所以我可以推荐你另一件事:
每次你使用对象时,都会向每个对象提供他的角色和任务,然后每个选择都取决于你想要使用的逻辑。选择您认为可以使用的那个并且适合您想要使用它的上下文。