Іноді (рідко) здається, що найкращим маршрутом є створення функції, яка приймає пристойну кількість параметрів.
Використання декількох параметрів часто є чітким показником того, що ви порушуєте SRP у цьому методі. Метод, який потребує багатьох параметрів, навряд чи зможе зробити лише одне. Вибух може бути математичною функцією або способом конфігурації, де дійсно потрібно кілька параметрів як таких. Я б уникнув декількох параметрів, оскільки диявол уникає святої води. Чим більше параметрів ви використовуєте в методі, тим більше шанс, що метод (занадто) складний; тим більше складність означає: складніше в обслуговуванні і тим менш бажано.
Однак, коли я це роблю, я відчуваю, що часто вибираю впорядкування параметрів навмання. Зазвичай я йду за "порядком важливості", перш за все найважливішим параметром.
У принципі ви обираєте навмання . Звичайно, ви можете подумати, що параметр A більш релевантний, ніж параметр B ; але це може бути не так для користувачів вашого API, які вважають, що B є найбільш релевантним параметром. Тож навіть якщо ви були уважні у виборі замовлення - для інших це може здатися випадковим .
Чи є кращий спосіб зробити це? Чи існує спосіб "найкращої практики" впорядкування параметрів, що підвищує чіткість?
Є кілька способів:
а) Тривіальний випадок: не використовуйте більше одного параметра.
б) Оскільки ви не вказали, яку саме мову обрали, є ймовірність, що ви вибрали мову з названими параметрами . Це приємний синтаксичний цукор, який дозволяє послабити значення впорядкованості параметрів:fn(name:"John Doe", age:36)
Не кожна мова допускає такі смаки. То що ж тоді?
в) Ви можете використати словник / хешмап / асоціативний масив як параметр: наприклад, Javascript дозволить таке: fn({"name":"John Doe", age:36})
що недалеко від (b).
г) Звичайно, якщо ви працюєте зі статично набраною мовою, як Java. ви можете використовувати Hashmap , але ви втратите інформацію про інформацію (наприклад, при роботі з HashMap<String, Object>
), коли параметри мають різні типи (і їх потрібно робити).
Наступним логічним кроком буде передача Object
(якщо ви використовуєте Java) відповідних властивостей або чогось більш легкого, як структура (якщо ви пишете, наприклад, C # або C / C ++).
Практичне правило:
1) Найкращий випадок - вашому методу взагалі не потрібні параметри
2) Хороший випадок - вашому методу потрібен один параметр
3) Терпимий випадок - вашому методу потрібні два параметри
4) Усі інші випадки мають бути відновлені
MessageBox.Show
. Подивіться і на це.