OOP a servisní třídy

magda

OOP a servisní třídy
« kdy: 24. 06. 2017, 10:35:23 »
Ahoj, připravuju se na zkoušku o OOP a několikrát jsem při shánění dalších informací narazila na webech, že servisní třídy nejsou moc OOP. Jasně, na netu se dá najít všechno a našla bych tam i opak. Ale myslím, že i tady na fóru ten názor občas zazní, tak jsem si říkala, že se zeptám zdejších odborníků přímo ;) Nevidím na nich nic moc špatného a i v projektech jsme je normálně používali, tak nevím.


balki

Re:OOP a servisní třídy
« Odpověď #1 kdy: 24. 06. 2017, 10:56:40 »
Ahoj, připravuju se na zkoušku o OOP a několikrát jsem při shánění dalších informací narazila na webech, že servisní třídy nejsou moc OOP. Jasně, na netu se dá najít všechno a našla bych tam i opak. Ale myslím, že i tady na fóru ten názor občas zazní, tak jsem si říkala, že se zeptám zdejších odborníků přímo ;) Nevidím na nich nic moc špatného a i v projektech jsme je normálně používali, tak nevím.

Ak myslite "utility classes", alebo "helpers", tak tie ozaj nie su moc objektove. Vyuzivanie "Utility" classes je skor proceduralny pristup.  Podla mojho nazoru je si lepsie priznat, ze clovek programuje multiparadigmovo, nez sa usilovat nasilu ciste objektovo. 

magda

Re:OOP a servisní třídy
« Odpověď #2 kdy: 24. 06. 2017, 11:23:31 »
Myslím takové ty NěcoService. Jako je třeba servisní vrstva plná podobných tříd. Možná jsem to jen špatně pochopila.

Kit

Re:OOP a servisní třídy
« Odpověď #3 kdy: 24. 06. 2017, 11:31:23 »
... že servisní třídy nejsou moc OOP ... Nevidím na nich nic moc špatného a i v projektech jsme je normálně používali, tak nevím.

Servisní třídy dokáží dost zamlžit kód, což je proti filosofii čistého OOP. Navíc si tím vynucují použití zbytečných přístupových metod v třídách obsahujících data. Sevisní třídy se blbě mockují, což přináší zbytečné problémy při psaní jednotkových testů. Polymorfismus se u servisních tříd také užívá blbě.

Při používání servisních tříd toho z OOP moc nezbude. Samotné servisní třídy objektové nejsou, je to jen hromada funkcí, kterým se říká "metody". Třída je pak jen převlečený namespace.

Franta <xkucf03/>

Re:OOP a servisní třídy
« Odpověď #4 kdy: 24. 06. 2017, 11:36:05 »
1) Alespoň formálně OOP jsou. Služba je nějak nainstanciovaný/naparametrizovaný objekt, má svoje data/stav a má nějaké chování.

2) Věcně vzato to moc objektové není, spíš procedurální.

3) Ovšem na tom není nic špatného. A často to poslouží líp než nějaké pokusy o „čistě objektový“ návrh.


balki

Re:OOP a servisní třídy
« Odpověď #5 kdy: 24. 06. 2017, 11:37:35 »
Myslím takové ty NěcoService. Jako je třeba servisní vrstva plná podobných tříd. Možná jsem to jen špatně pochopila.

Aha, hentie service classy, co sa pouzivaju JEE a podobnych. Bezstavove servisy su proceduralne. Stavove su mackopes, su to objekty ale blbo sa nad nimi robia objektove abstrakcie.

Franta <xkucf03/>

Re:OOP a servisní třídy
« Odpověď #6 kdy: 24. 06. 2017, 11:45:23 »
Sevisní třídy se blbě mockují, což přináší zbytečné problémy při psaní jednotkových testů.

Taková třída by měla implementovat nějaké rozhraní a ostatní volají to rozhraní, ne konkrétní implementaci. Navíc odkaz na tu instanci by volající třída měla dostat zvenku (ať už ručně setterem nebo automatizovaně přes nějaké DI), což se ti hodí právě při psaní těch jednotkových testů – podstrčíš tam mock místo skutečné implementace a volající kód není potřeba nijak měnit.

Při používání servisních tříd toho z OOP moc nezbude. Samotné servisní třídy objektové nejsou, je to jen hromada funkcí, kterým se říká "metody". Třída je pak jen převlečený namespace.

Můžeš mít víc instancí téže třídy, které jsou odlišně naparametrizované a díky tomu dělají něco jiného.

Pokud je třída někdy v roli jmenného prostoru, tak je to dané spíš tím, že řešená úloha je natolik jednoduchá a není potřeba mít víc instanci – ale ne tím, že by toho ta třída nedokázala víc (nebo daný jazyk nedokázal víc).

Kit

Re:OOP a servisní třídy
« Odpověď #7 kdy: 24. 06. 2017, 12:22:08 »
Můžeš mít víc instancí téže třídy, které jsou odlišně naparametrizované a díky tomu dělají něco jiného.

S tím souhlasím, v tom případě se jedná o plnohodnotný objekt. Takový však nepočítám mezi instance servisních tříd, i když jsou tak někdy pojmenovány.

andy

Re:OOP a servisní třídy
« Odpověď #8 kdy: 24. 06. 2017, 12:34:01 »
Kit ako uz zaznelo, robis to spatne. Prave naopak, tie servisne triedy sa najlepsie mockuju. Ale zavislosti tiez musia byt interface (okrem POJO). Inak musis pouzivat kadejake spy mocky co sa neodporuca. K tym parametrom - mozes si vytvorit N implementacii pre kazdu kombinaciu parametrov ked chces. Ak su tie parametre final, nie je to jedno?

Bezstavove servisne triedy nepracuju nad zapuzdrenymi datami, preto sa casto nepovazuju za oop. Je to skor nieco ako v C struktura obsahujuca callbacky. Najma v business programovani ide o vycucnutie dat z db, ich spracovanie a preposlanie klientovi (nejake tie formulare). Vacsinou na to netreba ziaden stav (teda zapuzdrovat data) a ak aj treba, nedrzi sa v objekte, ale v nejakom kontexte (ono to je skor kvoli tomu, ze niekto vymyslel, ze to budu singletony). Ale stale sa pouziva polymorfizmus (viac implementacii servis interfacu), implementujuce triedy mozu pouzivat dedenie atd. Proste vec pohladu. Naopak, OOP sa da programovat aj v C, ale nema modifikatory viditelnosti, tak ludia sa budu hadat, ze to nie je oop..

Kit

Re:OOP a servisní třídy
« Odpověď #9 kdy: 24. 06. 2017, 12:46:55 »
Kit ako uz zaznelo, robis to spatne. Prave naopak, tie servisne triedy sa najlepsie mockuju. Ale zavislosti tiez musia byt interface (okrem POJO). Inak musis pouzivat kadejake spy mocky co sa neodporuca. K tym parametrom - mozes si vytvorit N implementacii pre kazdu kombinaciu parametrov ked chces. Ak su tie parametre final, nie je to jedno?

Servisní třídy nepoužívám.

andy

Re:OOP a servisní třídy
« Odpověď #10 kdy: 24. 06. 2017, 12:52:38 »
Servisní třídy nepoužívám.
To vela vysvetluje :).

Kit

Re:OOP a servisní třídy
« Odpověď #11 kdy: 24. 06. 2017, 12:53:34 »
Servisní třídy nepoužívám.
To vela vysvetluje :).

Čemu vlastně říkáš "servisní třída"?

BoneFlute

  • *****
  • 2 047
    • Zobrazit profil
Re:OOP a servisní třídy
« Odpověď #12 kdy: 24. 06. 2017, 21:42:51 »
Myslím takové ty NěcoService. Jako je třeba servisní vrstva plná podobných tříd. Možná jsem to jen špatně pochopila.

Servisní třídy (nebo tedy pokud jsem tě dobře pochopil tak Servisy) používám a používám je rád. Dost to zpřehledňuje kód, protože určitá logika je na jednom omezeném a kontrolovatelném místě. Dobře se definuje, co to má dělat. Pohodlně se to testuje. A při inteligentním návrhu se to dá i dobře komponovat. Snadno se s nimi pracuje ve smyslu snadné nahraditelnosti, změnitelnosti, protože zbytečně nerozšiřuje rozhraní aplikace.

Co se týče OOP, tak bych to moc neprožíval. Žádné mainstreamové OOP jazyky OOP nejsou. A co se týče definice OOP, tak si pod tím každý představuje ledacos.

Takže jako odpověď na tvou otázku: V praxi Servisy ano. V teorii (zkouška ve škole) OOP je bordel, a každej jazyk si to dělá po svém. Co člověk, to názor a na Kaye si nikdo nevzpomene.

Re:OOP a servisní třídy
« Odpověď #13 kdy: 24. 06. 2017, 21:55:36 »
Podle mě jeden o voze a druhý o koze. Skutečně je to hlavně o tom, co se tou servisní třídou vůbec myslí.

jpu

Re:OOP a servisní třídy
« Odpověď #14 kdy: 24. 06. 2017, 21:56:42 »
To tu zas budu perly :D