Как к способам форматирования с большими списками параметров

Я бы предложил заменить prepend_before_filter, который устарел, на prepend_before_action и использовать скобки

 prepend_before_action(only: [:create, :destroy]) { request.env["devise.skip_timeout"] = true }

или использовать блочный синтаксис do ... end

prepend_before_action only: [:create, :destroy] do 
  request.env["devise.skip_timeout"] = true
end
17
задан John Millikin 10 October 2008 в 01:17
поделиться

3 ответа

Большой набор параметров как это часто является (но не всегда) индикатором, что Вы могли использовать объект представить набор параметра. Это особенно верно если также:

  • существует несколько методов с подобными большими наборами параметра, которые могут быть заменены отдельным методом, берущим объект параметра.

  • метод называют create...

, Таким образом, Ваш выше кода мог стать (простите мой C++, я - Java-разработчик):

class BuildVehicleBooking {
    Long officeId;
    Long start;
    Long end;
    String origin;
    String destination;
    String purpose;             
    String requirements;
    Integer numberOfPassengers;

    Booking createVehicleBooking () throws ServiceException { ... }
}

Это разработчик Pattern . Преимущество этого шаблона состоит в том, что можно создать сложный набор параметров в частях, включая несколько вариаций на то, как параметры касаются друг друга и даже перезаписи параметров, поскольку новая информация становится доступной, прежде наконец звонить create метод в конце.

Другое потенциальное преимущество состоит в том, что Вы могли добавить verifyParameters метод, который проверил их последовательность перед движением до creating конечный объект. Это применимо в случаях, где создание объекта включает необратимые шаги, такие как запись в файл или базу данных.

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

16
ответ дан 30 November 2019 в 12:21
поделиться
public Booking createVehicleBooking(
    Long officeId, 
    Long start, 
    Long end,
    String origin, 
    String destination, 
    String purpose,                 
    String requirements, 
    Integer numberOfPassengers)

throws ServiceException {
/*..Code..*/
}
8
ответ дан 30 November 2019 в 12:21
поделиться

I'be, склонный пойти об этом с несколькими объектами вместо всего один.

, Таким образом, это становится

public Booking createVehicleBooking(Long officeId, DateRange dates, TripDetails trip)

, В то время как DateRange и детали Прохождения содержат только соответствующие части данных. Хотя возможно dateRange мог быть частью прохождения, в то время как Требования и Число Пассажиров могли быть remoived от TripDetails и сделали часть запроса.

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

И помнят, что всегда возможно встроить объекты в объекте, таким образом разрешающем Вам иметь

public Booking createVehicleBooking(BookingParameters parameters)

, В то время как BookingParameters Содержит объекты TripDetails и DateRange, а также другие параметры.

3
ответ дан 30 November 2019 в 12:21
поделиться
Другие вопросы по тегам:

Похожие вопросы: