所以,假设我有一个通用对象,Person。一个人有姓名和性别 - 姓名必须是字符串,性别必须是male
或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()。但是对我来说似乎很奇怪有一个有效的()方法。
一般来说,如何实例化这些对象?这是一个主观的事情,还是有一种普遍的“正确方式”?
答案 0 :(得分:1)
如果你相信自己永远不会创建无效的对象,那么你真的不需要一种方法来检查有效性。但是,如果您要根据用户数据创建可能无效的对象,那么您应该有一个有效性检查方法,并且调用该方法应该是构造函数的最后一件事。如果可以发生对该对象的转换,使其无效,则应在所述转换发生后立即调用所述方法。应立即捕获无效对象,除了偶尔抛出异常外,该类的最终用户不应该担心它。
答案 1 :(得分:0)
PersonList
这样的类不是通用的。它与Person
。