Wpis z mikrobloga

#programowanie

Może jestem jakiś zboczony, ale mam bzika na punkcie czystego i ładnego kodu. Często napotykam na sytuację w której jakaś metoda musiałaby być bardzo długa. Dlatego co oczywiste, wydzielam metody. Wtedy moja jedna duża metoda wygląda tak:

int wyliczPensje() {
wyliczZus();
wyliczUbezpieczenie();
wyliczPremie();
wyliczCosTam();
odejmijCosTam();
return pensja;
}

Strasznie nie podobają mi się metody w których wywoływane są inne metody, jedna po drugiej. :< Jednocześnie nie widzę tutaj błędu w sztuce bo wszystko jest zgodne z zasadą jednej odpowiedzialności. A Wy co o tym sądzicie?
  • 14
@bartoneczek: no czego jesteś taki #!$%@? agresywany już bardziej się skupić nie mogę


Jest ok tylko ze to wtedy powinna być może fasada? Albo jakiś inny wzorzec, zależy od reszty aplikacji w sumie.
@bartoneczek: ale w zasadzie to o co Ci chodzi? masz klasę, masz wywołania kolejnych rzeczy, które mają się wydarzyć. Jak inaczej chciałbyś to zrobić? Oczywiście wszystko zależy od konkretnego przypadku, ale jeśli te metody są ściśle biznesowe (tzn. nie chcemy, żeby to było mocno konfigurowalne, bo dodanie kolejnego to ważna decyzja biznesowa i świadomie nie chcemy tego zostawiać konfiguracji) to nie bardzo wiem jakbyś chciał to zmienić. Oczywiście zakładając podejście OO.
@bartoneczek: jest ok ale najlepiej jak metody coś zwracają- wtedy masz czyściej i możesz wywalić z klasy pola które służą tylko do współdzielonej logiki a nie będą nigdy zwrócone na zewnątrz. I widzisz w metodzie cały flow aplikacji.

Edit
To oczywiście dotyczy sytuacji w której kolejne metody bazują na wynikach poprzednich
@b0lec: API jest tutaj metodą wyliczPensję dla pracownika. I tego oczekuję od klasy. Wyliczyć pensję dla pracownika. Reszta metod to metody prywatne i nie chcę ich udostępniać zewnętrznie właśnie dlatego że chcę żeby pracowały na polach współdzielonych dla klasy. Gdyby nie współdzielone pola, jaki byłby sens klas? Równie dobrze można by było wtedy używać metod statycznych. ;)

Ja wiem, ja rozumiem o co Ci chodzi. Można zrobić te metody prywatne, zwracające
@bartoneczek
Zależy od języka. W C++ sam dbasz o zbieranie śmieci po kodzie i zwalnianie zasobów. Ale taki python robi to automatycznie.
Wywoływanie metody w metodzie jest uważane za dobrą praktykę, bo wtedy zmienne z lokalnego zakresu funkcji są wywołane w niebyt, są zwalniane przez automat w trakcie pracy programu.