Załóżmy, że mam funkcję IsAdmin
sprawdzającą, czy użytkownik jest administratorem. Powiedzmy również, że sprawdzanie przez administratora odbywa się poprzez dopasowanie identyfikatora użytkownika, nazwy i hasła do jakiejś reguły (nieistotnej).
W mojej głowie są do tego dwie możliwe sygnatury funkcji:
public bool IsAdmin(User user);
public bool IsAdmin(int id, string name, string password);
Najczęściej wybieram drugi rodzaj podpisu, myśląc, że:
- Podpis funkcji daje czytelnikowi znacznie więcej informacji
- Logika zawarta w funkcji nie musi wiedzieć o
User
klasie - Zwykle powoduje to nieco mniej kodu wewnątrz funkcji
Czasami jednak kwestionuję to podejście i zdaję sobie sprawę, że w pewnym momencie stałoby się ono niewygodne. Gdyby na przykład funkcja odwzorowała między dziesięć różnych pól obiektu na wynikowy bool, oczywiście wysłałbym cały obiekt. Ale oprócz tego surowego przykładu nie widzę powodu, aby przekazać rzeczywisty obiekt.
Byłbym wdzięczny za wszelkie argumenty za każdym stylem, a także za wszelkie ogólne spostrzeżenia, które możesz zaoferować.
Programuję zarówno w stylach zorientowanych obiektowo, jak i funkcjonalnie, więc pytanie powinno dotyczyć wszystkich idiomów.