Я читал Чистый код Роберта С. Мартина. В нем он заявляет, что функция должна использовать минимальное количество параметров по мере необходимости, и что имена функций должны соответствовать соглашению об именах в рамках всего проекта, избегая при этом беспричинного контекста.
Например, если у меня есть простой класс, который я написал для этого вопроса, Car
:
public class Car
{
internal string make { get; set; }
internal string model { get; set; }
public Car(string make, string model)
{
this.make = make;
this.model = model;
}
}
А класс Cars
:
public class Cars
{
internal List<Car> cars { get; set; }
public Cars(List<Car> cars)
{
this.cars = cars;
}
public Car GetCar(string make)
{
foreach (Car car in cars)
{
if (car.make == make) return car;
}
return null;
}
public Car GetCar(string model)
{
foreach (Car car in cars)
{
if (car.model == model) return car;
}
return null;
}
}
Очевидно, что это не компилируется, так как функции с именем GetCar
имеют одинаковую сигнатуру функции.
Обычно я мог бы обойти это, переименовав функции GetCarByMake
и GetCarByModel
, или что-то подобное, но текст, кажется, указывает, что это не лучшая практика. В других случаях я мог бы добавить дополнительный неиспользуемый параметр для их дифференциации.
Моей следующей мыслью было создание класса для каждого свойства в Car
; есть класс для Make
и Model
, который содержит строковое свойство. Однако, это, кажется, приводит к ненужным накладным расходам.
Мне любопытно, как я могу реализовать / назвать несколько функций, которые выполняют условно похожие вещи, имеют одинаковые типы данных параметров и выводят один и тот же тип данных, не имея разных имен функций? Кроме того, меня не интересует перегрузка дополнительных функций или полиморфизм для этого вопроса или подобные темы; Я хочу знать ответ относительно классов, поскольку они в настоящее время без существенных изменений. Единственный ответ, который я сейчас вижу, - это создание классов для каждого свойства.
Пожалуйста, дайте мне знать, если необходимы какие-либо разъяснения или изменения.
EDIT:
Так же, как некоторая дополнительная информация, это чисто академическое упражнение. Профессионально, я бы просто создал методы с разными именами и покончил бы с этим. Как указано в комментариях, это просто, ремонтопригодно и работает.