1

所以假设我有一个通用对象,Person。一个人有一个名字和一个性别——名字必须是一个字符串,而性别必须是maleor female。我还有一个集合对象,PersonList,它有一个 Person 对象数组并允许对集合进行操作(例如,返回某个性别的人的列表。)

一方面,用构造函数中的数据创建 PersonList 会很好......

list = new PersonList([new Person('Alice', 'Female'), ...]);

...但是我们不知道数据是否有效。我们可以允许无效的 Person 对象进入,并在访问它们时检查它们的有效性,或者我们可以给 Person 一个 vaild() 方法并说...

list = new PersonList();
alice = new Person('Alice', 'Female');
if (alice->valid()) list->add(alice);

...或者也许我们在 add() 中检查 valid()。但是对我来说,有一个 valid() 方法似乎很奇怪。

一般来说,您将如何实例化这些对象?这是主观的事情,还是有普遍的“正确方式”?

4

2 回答 2

1

如果您相信自己永远不会创建无效对象,那么您实际上不需要检查有效性的方法。但是,如果您要根据用户数据创建可能无效的对象,那么您应该有一个有效性检查方法,并且调用该方法应该是构造函数所做的最后一件事。如果对该对象的转换可能导致其无效,则还应在所述转换发生后立即调用所述方法。应该立即捕获无效对象,并且类的最终用户不必担心它,除了偶尔会抛出异常。

于 2012-05-14T16:53:42.820 回答
0
  1. 像这样的类PersonList不是通用的。它与Person.
  2. 目前尚不清楚为什么您认为您的硬编码数据可能无效。
  3. 如果可以构造一个在某种意义上无效的对象,那么您应该始终有一种方法来测试它在这种意义上的有效性。
于 2012-05-14T16:48:43.637 回答