Параметры стиля OO против параметров типа - PullRequest
3 голосов
/ 31 декабря 2008

Скажем, у вас есть два метода:

Номер 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, конечно, является хорошим подходом, но в моем коде действительное состояние человека часто зависит от контекста и может варьироваться от метода к методу. Это может быть признаком плохого дизайна.

Код является лишь примером для описания проблемы.

Ответы [ 12 ]

0 голосов
/ 31 декабря 2008

Это зависит от контекста.

Если все ваши методы вызова имеют дело с объектами Person, то первое - это правильное решение.

Однако, если некоторые из ваших методов вызова имеют дело с именами и датами рождения, а некоторые - с объектами Person, то второй пример - правильное решение.

0 голосов
/ 31 декабря 2008

Я бы большую часть времени пошел на первый.

Второй нарушит подпись при каждом изменении личности

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...