【问题标题】:Passing reference to instance into another object when new object is part of original object?当新对象是原始对象的一部分时,将对实例的引用传递给另一个对象?
【发布时间】:2021-05-23 21:24:12
【问题描述】:

当新实例将成为原始实例的一部分时,将父类的 this 实例传递给另一个对象的构造函数时,是否存在任何缺陷(从设计角度来看)?

public class Order extends AbstractOrder {

  private final OrderExecutionStrategy executionStrategy;

  private Order() {
    this.executionStrategy = new OrderExecutionStrategy(this);
  }

  // the implementation omitted for brevity...

}

我需要从 OrderExecutionStrategy 类中的父实例访问数据。

public class OrderExecutionStrategy extends AbstractOrderExecutionStrategy  {

  public OrderExecutionStrategy(final Order order) {
    super(order);
  }

  @Override
  public Optional<OrderPortion> executePortion(final BigDecimal newPrice, final TradeOrders orders) {

    AssertUtils.notNull(orders, "orders");
    AssertUtils.isGtZero(newPrice, "newPrice");

    if (ComparisonUtils.equals(getOrder().getPrice(), newPrice)) {

      final BigDecimal reaminingAmount = this.getOrder().summary().getRemainToFill();

      if (ValidationUtils.isGtZero(reaminingAmount)) {
        return Optional.of(new OrderPortion(this.getOrder().getId(), reaminingAmount));
      }

    }

    return Optional.empty();

  }

}

【问题讨论】:

  • 很难说。细节不够。
  • @StephenC 我应该澄清什么样的细节?我认为这两个实例可能会相互产生负面影响,一个无限循环或某种意义上的东西。
  • 好吧,也许向我们展示父类,策略类,并解释代码应该做什么。 “我认为这两个实例可能会相互产生负面影响,形成无限循环或某种意义上的东西。” - 显然,如果没有看到代码,我们不能说这些事情是否会发生。 OTOH,它们可能是实现缺陷(又名错误)而不是设计缺陷。 (在这种情况下,“设计”是什么意思?)
  • @StephenC 添加了策略类,按设计我的意思是这些对象的组合类型。

标签: java oop architecture


【解决方案1】:

我看不出有任何设计缺陷。

但是,有几点需要注意:

  1. 我说的是设计缺陷,而不是实现缺陷。

    “我认为这两个实例可能会相互产生负面影响,形成无限循环或某种意义上的东西。”

    那些将是实施缺陷(也称为错误),而不是设计缺陷。需要更多上下文来检查这种情况。

  2. 您只向我们展示了设计的一小部分,几乎没有关于它如何融入“更大的图景”的线索。

【讨论】:

    猜你喜欢
    • 2012-09-15
    • 2015-09-15
    • 1970-01-01
    • 2013-06-14
    • 2019-05-02
    • 2023-03-24
    • 1970-01-01
    • 2015-06-14
    • 2021-12-07
    相关资源
    最近更新 更多