c# - OO 样式参数与类型参数

标签 c# oop methods

假设您有这两种方法:

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/

相关文章:

java - 从父类(super class)获取所有数据(this =)

C# 委托(delegate)定义 - 匿名方法与正式定义的方法

c# - FFMpegCore C# 自定义参数

c# - 将 MemoryStream 的内容作为 ASCII 字符串获取的快速方法

c# - c#中bool的默认值

java - 如何为不同的表示层设计应用程序?

oop - 何时以及如何为 DDD 中的实体分配唯一 ID?

PHP 两个同名方法

php - PHP 中的可解引用标量是什么?

c# - 仅 IronBarCode 流