当我需要一些项目时,我应该只使用它的"int id"吗?

jav*_*red 5 c# oop

我的应用程序InstrumentFactory- 我创建Instrument实例的唯一地方.每个仪器实例都包含多个字段,例如Ticker=MSFTGateId=1,也是唯一的Id =1.

现在我意识到我几乎从不需要Instrument实例.在我需要的90%的情况下Id.例如,现在我有这样的方法:

public InstrumentInfo GetInstrumentInfo(Instrument instrument)
{
    return instrumentInfos[instrument.Id];
}
Run Code Online (Sandbox Code Playgroud)

我们知道我们不应该传递比所需更多信息的参数.所以这段代码可能应该重构为:

public InstrumentInfo GetInstrumentInfo(int instrumentId)
{
    return instrumentInfos[instrumentId];
}
Run Code Online (Sandbox Code Playgroud)

我现在可以重构90%的代码instrumentId而不是使用Instrument.

我应该这样做吗?改变无处不在Instrument,以instrumentId将它作为一个硬性要求(每个仪表应该有且仅有一个唯一的ID).但是我会有什么好处?作为"硬性要求"的回报,我想为此获得一些好处......(速度,可读性?)但我没有看到它们.

svi*_*ick 4

到处使用 ids 而不是对象是错误的方法,它违背了 OOP 的精神。

使用对象本身有两大优点:

  1. 它是类型安全的。您不可能意外地将某些内容传递Person给第一个版本,但您可能会意外地传递person.Id给第二个版本。
  2. 它使您的代码易于修改。如果将来您决定需要longids 或其他方式来标识唯一的Instrument,则无需更改调用代码。

你可能也应该改变你的字典,它应该是像Dictionary<Instrument, InstrumentInfo>,而不是Dictionary<int, InstrumentInfo>像你现在这样。这样,您也可以获得这两个优势。为了使其发挥作用,您需要在 中实现平等Instrument,这意味着正确覆盖Equals()并且GetHashCode()理想情况下还实现IEquatable<Instrument>.