首页 > 解决方案 > 我如何访问未连接到我的班级的列表

问题描述

在此处输入图像描述

上图是我的类图的图片。但是我有一个问题。在我的 OrderForm 类中,我想显示一个没有库存的订单中所有部件的属性运输时间。但是我不能以方便的方式访问仓库。我不能只制作一个对象,因为它的库存与车间实际使用的库存不同,而且我不能将可用零件列表设为静态,因为这意味着未来的每个仓库都将拥有相同的库存。

有谁知道这个的解决方法?

标签: c#listobject

解决方案


为什么不简单地将 WareHouse 传递给 Order?您甚至可以提取一个接口,例如发布 GetStock 方法的 IStockManager 在您的 WareHouse 上实现它,然后将其传递给订单。

有很多方法可以连接这些类,有些方法的耦合度低于其他方法,这取决于您的架构,但我认为我上面提到的方法可以满足您的需求。

编辑:

根据要求,这里是一个非常基本的“中介”类的示例。它并不完全符合模式,但它应该足以让你走上正确的轨道。

基本上,您的案例中的中介需要初始化所有对象,并发布您希望其他类可以访问的方法。

public class Mediator
{
   private readonly WareHouse _wareHouse;
   private readonly OrderForm _orderForm;

   public Mediator()
   {
      _wareHouse = new WareHouse();
      _orderForm = new OrderForm(this);
   }

   public int GetStock(Part part)
   {
      return _wareHouse.GetStock(part);
   }
}

基本上,中介者托管所有知道中介者的类都可以访问的方法。如您所见,我们将 Mediator 传递给 OrderForm 的构造函数,因此 OrderForm 现在知道了 Mediator 及其方法(GetStock)。

public class OrderForm
{
   private readonly Mediator _mediator;

   public OrderForm(Mediator mediator)
   {
      _mediator = mediator;
      var stock = _mediator.GetStock(yourPart);
      // Now you can call WareHouse.GetStock(yourPart) through the 
         mediator
   }
}

我不知道将这个类称为调解器是否真的正确,因为它不完全符合模式,但对于简单的应用程序来说已经足够了,如果你想正确实现它,你可以阅读它。


推荐阅读