c# - 我如何访问未连接到我的班级的列表
问题描述
上图是我的类图的图片。但是我有一个问题。在我的 OrderForm 类中,我想显示一个没有库存的订单中所有部件的属性运输时间。但是我不能以方便的方式访问仓库。我不能只制作一个对象,因为它的库存与车间实际使用的库存不同,而且我不能将可用零件列表设为静态,因为这意味着未来的每个仓库都将拥有相同的库存。
有谁知道这个的解决方法?
解决方案
为什么不简单地将 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
}
}
我不知道将这个类称为调解器是否真的正确,因为它不完全符合模式,但对于简单的应用程序来说已经足够了,如果你想正确实现它,你可以阅读它。
推荐阅读
- css - GULP 和 SASS 错误传递变量
- .net-core - 在 .net-Core 中自动填充 Web 表单
- ios - UICollectionView:ScrollToItem 到中心单元格在水平集合视图上不起作用
- python - 为什么 DataFrame 相关性会显示这些结果
- python - Python - Tkinter 修复对象位置
- android - 在android中的imageview上绘制多个点
- regex - PL/SQL。使用 regexp_like 正则表达式解析 clob UTF8 字符
- maven - Maven pom 依赖项的 Jenkins 环境变量
- corda - 如何扩展 Corda 节点以使用 H2 以外的数据库?
- import - 在 Common Lisp 上的特定包中重命名函数