Скажем, у вас есть два метода:
Номер 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);
}
Какой из двух методов является лучшим? Я знаю, что первый является более правильным с точки зрения ОО, но я чувствую, что второй более читабелен, и вам не нужно проверять, что объект действителен, так как параметры в этом уверены. Мне просто не нравится проверять объекты везде, где я передаю их в качестве параметров. Есть ли другие подходы?
EDIT:
Спасибо за все ответы. Чтобы уточнить, проверка в конструкторе и методе IsValid, конечно, является хорошим подходом, но в моем коде действительное состояние человека часто зависит от контекста и может варьироваться от метода к методу. Это может быть признаком плохого дизайна.
Код является лишь примером для описания проблемы.