构造函数中的数据验证?

时间:2014-04-08 17:34:31

标签: c++ validation oop constructor

我是OO编程的初学者,这个问题是关于在特定设计中处理数据验证。我已经阅读过关于类似问题的this thread,我喜欢第二个解决方案,它建议重新设计构造函数接口,使得无效值无效,但我想知道这个想法是否也适用于我的情况。所以我在下面概述了我的想法,并想知道人们是否同意我的想法。

我有一个Die类,它是通过传递概率向量构建的。所有概率必须是非负的,并且必须加起来为1.0。

class Die
{
public:
    Die(/* Probability vector. */);
    int Roll();
}

我可以考虑实现数据验证的几个选项:

  1. Die构造函数受到保护并接受std::vector<double>。然后有一个执行数据验证的静态公共方法,如果成功则返回指向新Die对象的指针,否则返回NULL

  2. 创建一个包含ProbabilityVector的{​​{1}}类,并在那里实现数据验证(使用上面的受保护构造函数+公共静态方法)。然后std::vector<double>构造函数接受(指向a)Die的指针。

  3. ProbabilityVector上使用静态方法实现单独的ProbabilityVectorValidation类,返回std::vector<double>。然后,在必要时,在将bool传递给std::vector<double>构造函数之前使用此方法。

  4. (1)的缺点是每次创建Die时都会执行验证,即使这可能不是必需的。 (2)解决这个问题,但我不确定受保护的构造函数+静态公共方法是否优雅,因为它涉及原始指针。 (3)看起来像一个有吸引力的选择,但似乎不如(1)和(2)那么强大?

0 个答案:

没有答案