如何处理必须按特定顺序调用的公共函数的依赖项?

时间:2009-09-02 08:14:01

标签: c++ dependencies

假设我有一个处理某些数据的类:

class SomeClass
{
  public:
    void SetData(IData*);
    void ProcessData(void);
}

在调用ProcessData()之前,类需要设置数据。我该如何强制执行此依赖项?如果在传入任何数据之前调用ProcessData(),我可以返回错误代码或抛出异常。如何抛出异常声音?

其他信息 一些答案建议将IData传递给构造函数或ProcessData()。这些都是合理的答案。我之所以不这样做是因为这是GUI系统的一部分;用户可以在任何时间点将新数据加载到SomeClass并对其进行修改,因此在创建SomeClass时,数据可能无法使用。

(是的,我可以使用更好的设计来避免这个问题,但是我的老板希望在屏幕上看到结果,我必须在好的设计和视觉效果之间做出妥协)。

4 个答案:

答案 0 :(得分:4)

使SomeClass构造函数需要IData并删除SetData。同样,您也可以将IData传递给ProcessData

答案 1 :(得分:2)

您可以选择直接在ProcessData方法的签名中要求数据。因此,它将公开其公共合同 - 需要这些特定数据才能发挥作用。

class SomeClass
{
  public:
    //void SetData(IData*);
    void ProcessData(IData*);
}

或者您可能需要在对象构造中设置数据,然后才能调用该实例上的任何方法。

class SomeClass
{
  public:
    SomeClass (IData* data) { SetData (data); }
    void ProcessData(IData*);

  private:
    void SetData(IData*);
}

答案 2 :(得分:2)

或者如何删除SetData并使流程方法直接获取数据,即ProcessData(IData*)?如果这对您不起作用,抛出异常是比使用错误代码更好的解决方案。

答案 3 :(得分:0)

在文档中抛出异常写这种依赖关系听起来非常好。这就是例外情况:做出先决条件有效性的断言!