次の2つの方法があるとします。
番号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);
}
2つの方法のどちらが最適ですか?最初のものがOOに関してより正しいことは知っていますが、2番目のものの方が読みやすいと思います。パラメーターがこれを確認するので、オブジェクトが有効であることを確認する必要はありません。オブジェクトをパラメータとして渡す場所でオブジェクトを検証する必要はありません。他のアプローチはありますか?
編集:すべての答えのためのThx。明確にするために、コンストラクターとIsValidメソッドで検証することはもちろん良いアプローチですが、私のコードでは、人の有効な状態はコンテキストに依存することが多く、メソッドごとに異なる可能性があります。もちろん、これは悪い設計の兆候である可能性があります。
このコードは、問題を説明するための単なる例です。