Я бы посоветовал придерживаться того же пути, что и раньше. Количество параметров в вашем примере невелико, но альтернативы намного ужаснее.
Карта - Вы упомянули об эффективности, но вот более серьезная проблема:
- Абоненты не знают, что вам послать, не обращаясь ни к чему
другому ... У вас есть документация javadoc, в которой точно указано, какие ключи и
значения используются? Если да (и это здорово), то наличие большого количества параметров тоже не проблема.
- Становится очень сложно принимать разные типы аргументов. Вы можете либо ограничить входные параметры одним типом, либо использовать Map <String, Object> и привести все значения. Оба варианта в большинстве случаев ужасны.
Объекты-оболочки - это просто устраняет проблему, поскольку вам нужно заполнить объект-оболочку в первую очередь - вместо того, чтобы напрямую к вашему методу, это будет к конструктору объекта параметра. Определение целесообразности перемещения проблемы зависит от повторного использования указанного объекта. Например:
Не использовал бы его: он будет использоваться только один раз при первом вызове, поэтому много дополнительного кода для работы с 1 строкой ...?
{
AnObject h = obj.callMyMethod(a, b, c, d, e, f, g);
SomeObject i = obj2.callAnotherMethod(a, b, c, h);
FinalResult j = obj3.callAFinalMethod(c, e, f, h, i);
}
Может использовать: Здесь он может немного больше. Во-первых, он может учитывать параметры для трех вызовов методов. он также может выполнять 2 другие строки сам по себе ... так что он становится в некотором смысле переменной состояния ...
{
AnObject h = obj.callMyMethod(a, b, c, d, e, f, g);
e = h.resultOfSomeTransformation();
SomeObject i = obj2.callAnotherMethod(a, b, c, d, e, f, g);
f = i.somethingElse();
FinalResult j = obj3.callAFinalMethod(a, b, c, d, e, f, g, h, i);
}
- Паттерн Строитель - это на мой взгляд антипаттерн. Наиболее желательный механизм обработки ошибок - обнаруживать раньше, а не позже; но с шаблоном компоновщика вызовы с отсутствующими (программист не подумал включить) обязательными параметрами перемещаются из времени компиляции во время выполнения. Конечно, если программист намеренно поместил в слот null или что-то подобное, это будет время выполнения, но все же обнаружение некоторых ошибок на более раннем этапе является гораздо большим преимуществом для программистов, которые отказываются смотреть на имена параметров вызываемого ими метода. Я считаю это целесообразным только при работе с большим количеством необязательных параметров, и даже в этом случае выгода в лучшем случае незначительна. Я категорически против "выкройки" строителя.
Другая вещь, которую люди забывают учитывать, - это роль IDE во всем этом. Когда у методов есть параметры, IDE генерируют для вас большую часть кода, и у вас есть красные линии, напоминающие вам, что вам нужно предоставить / установить. При использовании варианта 3 ... вы полностью теряете это. Теперь программист должен сделать это правильно, и во время кодирования и компиляции нет никаких подсказок ... программист должен проверить это, чтобы узнать.
Кроме того, варианты 2 и 3, если они будут приняты широко и без необходимости, будут иметь долгосрочные негативные последствия с точки зрения обслуживания из-за большого количества генерируемого дублированного кода. Чем больше кода, тем больше нужно поддерживать, тем больше времени и денег тратится на его поддержку.