实例化集合对象

时间:2012-05-14 16:44:29

标签: oop language-agnostic

所以,假设我有一个通用对象,Person。一个人有姓名和性别 - 姓名必须是字符串,性别必须是malefemale。我还有一个集合对象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()。但是对我来说似乎很奇怪有一个有效的()方法。

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

2 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:0)

  1. PersonList这样的类不是通用的。它与Person
  2. 相关联
  3. 目前尚不清楚为什么您认为您的硬编码数据可能无效。
  4. 如果可以构造一个在某种意义上无效的对象,那么你应该总是有一种方法来测试它的有效性。