Я б сказав, дотримуйтесь того, як ви це робили раніше. Кількість параметрів у вашому прикладі не велика, але альтернативи набагато жахливіші.
Карта - Ви згадали про ефективність, але тут є більша проблема:
- Користувачі, які телефонують, не знають, що вам відправити, не посилаючись на щось
інше ... Чи є у вас javadocs, де вказано, які саме ключі та
значення використовуються? Якщо ви це зробите (що чудово), то наявність багатьох параметрів теж не є проблемою.
- Прийняти різні типи аргументів стає дуже важко. Ви можете обмежити вхідні параметри одним типом, або скористатися 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);
}
Може використовувати його: тут він може зробити трохи більше. По-перше, він може враховувати параметри для 3 викликів методів. він також може виконувати 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, якщо вони будуть прийняті без необхідності, матимуть довгострокові негативні наслідки з точки зору обслуговування через велику кількість дублікатів коду, який він генерує. Чим більше коду, тим більше його потрібно підтримувати, тим більше часу і грошей витрачається на його підтримку.