Две функции или одна функция с разными параметрами? - PullRequest
4 голосов
/ 08 мая 2009

Это очень общий вопрос «передового опыта», но вот пример.

Допустим, у меня есть приложение для каталогизации фильмов. Я хочу дать своим пользователям возможность указать, скажем, IMDb или Metacritic для их синопсиса / информации о рейтинге.

Должен ли я сделать это:

if (preferredSupplier == "imdb"){
      getIMDbRating(movieName);
}else{
      getMetacriticRating(movieName);
}

Или это:

getRating(movieName, preferredSupplier);

Мне больше нравится второй, но это означает, что функция должна будет следовать совершенно другой логике в зависимости от значения второго параметра (например, для Metacritic может потребоваться очистка экрана, где у IMDb может быть хороший API).

Или мне их объединить? Как и в getRating () действует как функция-обертка и вызывает getIMDbRating () или getMetacriticRating () в зависимости от значения второго параметра.

Ответы [ 11 ]

0 голосов
/ 08 мая 2009

Я бы их объединил. Как вы сказали, эти два могут потребовать совершенно разных реализаций, а разделение кода реализации на разные функции делает вещи более удобочитаемыми и проще в обслуживании. Но иметь единую точку вызова тоже приятно. Вы можете рассмотреть возможность размещения этого в классе, помечая функции реализации как частные, а обертку - как открытые. Таким образом, обертка является единственной точкой контакта. Это еще больше повысит удобство обслуживания, сделав очевидным, что обертка должна быть единственной точкой вызова для этих функций.

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