Czasami (rzadko) wydaje się, że najlepszym rozwiązaniem jest utworzenie funkcji, która wymaga przyzwoitej liczby parametrów.
Używanie kilku parametrów jest często wyraźnym wskaźnikiem, że naruszasz SRP w tej metodzie. Metoda, która wymaga wielu parametrów, nie może zrobić tylko jednej rzeczy. Excpetion może być funkcją matematyczną lub metodą konfiguracji, w której rzeczywiście potrzebnych jest kilka parametrów . Unikałbym wielu parametrów, ponieważ diabeł unika wody święconej. Im więcej parametrów używasz w metodzie, tym większa szansa, że metoda jest (zbyt) złożona; tym bardziej złożona oznacza: trudniejsza w utrzymaniu i jest to mniej pożądane.
Jednak kiedy to robię, czuję, że często losowo wybieram porządkowanie parametrów. Zazwyczaj stosuję „porządek ważności”, z najważniejszym parametrem na początku.
Zasadniczo wybierasz losowo . Oczywiście możesz pomyśleć, że parametr A jest bardziej odpowiedni niż parametr B ; ale może nie być tak w przypadku użytkowników interfejsu API, którzy uważają B za najbardziej odpowiedni parametr. Więc nawet jeśli byłeś uważny w wyborze kolejności - dla innych może się to wydawać przypadkowe .
Czy jest na to lepszy sposób? Czy istnieje sposób „porządkowania” najlepszych praktyk, który poprawia przejrzystość?
Istnieje kilka sposobów wyjścia:
a) Trywialny przypadek: nie używaj więcej niż jednego parametru.
b) Ponieważ nie określiłeś, jaki język wybrałeś, istnieje szansa, że wybrałeś język o nazwanych parametrach . Jest to ładny cukier syntaktyczny, który pozwala rozluźnić znaczenie kolejności parametrów:fn(name:"John Doe", age:36)
Nie każdy język pozwala na takie subtelności. Co wtedy?
c) Możesz użyć Dictionary / Hashmap / Associative Array jako parametru: np. Javascript pozwala na: fn({"name":"John Doe", age:36})
co nie jest daleko od (b).
d) Oczywiście, jeśli pracujesz ze statycznie typowanym językiem, takim jak Java. możesz użyć Hashmapy , ale stracisz informacje o typie (np. podczas pracy HashMap<String, Object>
), gdy parametry mają różne typy (i trzeba rzutować).
Następnym logicznym krokiem byłoby przekazanie Object
(jeśli używasz Javy) odpowiednich właściwości lub czegoś bardziej lekkiego jak struct (jeśli napiszesz np. C # lub C / C ++).
Praktyczna zasada:
1) Najlepszy przypadek - twoja metoda wcale nie wymaga żadnych parametrów
2) Dobry przypadek - twoja metoda wymaga jednego parametru
3) Dopuszczalny przypadek - twoja metoda wymaga dwóch parametrów
4) Wszystkie pozostałe przypadki powinny zostać ponownie rozpatrzone
MessageBox.Show
. Spójrz również na to.