Іноді (рідко) здається, що найкращим маршрутом є створення функції, яка приймає пристойну кількість параметрів.
Використання декількох параметрів часто є чітким показником того, що ви порушуєте 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. Подивіться і на це.