Добавить новый метод или использовать один метод с параметром nullable?

1

Я могу определить два метода:

verifyPassengerInTrain(Integer trainId)

verifyPassengerInCompartments(Integer trainId, Integer[] selectedCompartments) 

или я могу добавить один метод, который обрабатывает оба случая с внутренней логикой:

verifyPassenger(Integer trainId, Integer[] selectedCompartments) {
    if(selectedCompartments == null || selectedCompartments.length == 0) {
       // Need to verify the passenger in the entire train and update the below method
       // update train.processedAllCompartments(true);  
     } else {
       // verify the passenger in the given train id and in the given compartments
     }  
 }

Проблема наличия одного метода заключается в том, что параметры не передают цель должным образом. Поэтому я предпочитаю использовать два метода.

Какой способ был бы хорошим подходом?

Теги:

1 ответ

2
Лучший ответ

Вы должны добавить оба метода, поскольку они служат другой цели. С вашей точки зрения, это может быть то, над чем вы работаете, как домашнее задание или практику, и вы станете единственным разработчиком.

Однако в практических приложениях несколько разработчиков могут не иметь одинакового знакомства с кодом. Поэтому определение методов, которые самоочевидны, гораздо важнее, чем краткость кода, особенно когда значение результатов сильно варьируется в зависимости от входных данных, как в этом случае.

Это становится еще более очевидным, когда некоторые люди могут иметь доступ к вашему Javadoc или методам как часть API. Сравните следующие две реализации, которые вы предложили.

// verifies whether or not a passenger is on a train if there are no selected compartments, or within the selected compartments if compartments are provided
verifyPassenger(Integer trainId, Integer[] selectedCompartments);

Разделение на два метода создает то, что можно рассматривать как пару самокомментирующих методов.

verifyPassengerInTrain(Integer trainId);
verifyPassengerInCompartments(Integer trainId, Integer[] selectedCompartments);

Существует очень мало вопросов о том, что делают эти два метода без какого-либо комментирования, направляющего пользователя.

  • 0
    Спасибо за подробное объяснение, и это было очень ясно.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню