假设您有这两种方法:
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);
}
这两种方法中哪一种最好?我知道第一个在面向对象方面更正确,但我觉得第二个更具可读性,并且您不必确保对象有效,因为参数可以确保这一点。我只是不喜欢在我将它们作为参数传递的任何地方验证对象。还有其他方法吗?
编辑: 谢谢所有的答案。澄清一下,在构造函数和 IsValid 方法中进行验证当然是一种好方法,但在我的代码中,人的有效状态通常取决于上下文,并且可能因方法而异。这当然可能是糟糕设计的标志。
代码只是举例说明问题。
最佳答案
第一个不必验证 person.Name 和 person.BirthDate - 它们应该由 Person
构造函数自动验证。换句话说,如果您传递给一个人,您应该知道它是有效的。
另一方面,您必须检查 person
不是空引用。
有时像第二个版本这样的便利方法是值得的,以避免必须经常显式调用构造函数。它通常应该只调用 Person
构造函数,然后将工作委托(delegate)给第一个表单。
关于c# - OO 样式参数与类型参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/403058/