假设你有这两种方法:
1号:
void AddPerson(Person person)
{
// Validate person
if(person.Name != null && IsValidDate(person.BirthDate)
DB.AddPersonToDatabase(person);
}
2号:
void AddPerson(string name, DateTime birthDate)
{
Person p = new Person(name, birthDate);
DB.AddPersonToDatabase(person);
}
这两种方法中哪一种是最好的?我知道第一个在 OO 方面更正确,但我觉得第二个更具可读性,您不必确保对象有效,因为参数可以确保这一点。我只是不喜欢在将对象作为参数传递的任何地方验证对象。还有其他方法吗?
编辑:谢谢所有的答案。澄清一下,在构造函数和 IsValid 方法中进行验证当然是一种好方法,但在我的代码中,人的有效状态通常取决于上下文,并且可能因方法而异。这当然可能是糟糕设计的标志。
该代码只是描述问题的示例。