Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> Deklaracja interfejsów zamiast klas pod testy jednostkowe
eerie
post 6.05.2024, 15:08:35
Post #1





Grupa: Zarejestrowani
Postów: 82
Pomógł: 0
Dołączył: 3.08.2017

Ostrzeżenie: (0%)
-----


Witam. Mam taką wątpliwość... Kiedyś przeczytałem artykuł na temat zasad SOLID. Autor sugerował, iż powinno się deklarować jako typy wartości (np. parametry i zwracana wartość metody) interfejsy i klasy abstrakcyjne zamiast konkretnych klas, aby kod był przystosowany pod testy jednostkowe z np. PHP Unit. Innym razem poznałem opinię, iż np. taki język programowania Pyton w ogóle nie ma interfejsów i nie ma sensu "onanizować się kodem". wink.gif

Ostatnio przystosowałem moją starą przykładową aplikację do nowego framework'a Symfony 7. W trakcie programowania raz definiowałem, iż jakiś wstrzykiwany do kontrolera obiekt ma interfejs (np. "EntityManagerInterface"). Innym razem podawałem, iż jest danej klasy (np. "Environment"). Jak w kodzie poniżej:

https://github.com/webeeq/toposoba.eeq/blob...aController.php

I tu rodzi się moje pytanie. Czy jeśli nie mam zamiaru stosować w mojej aplikacji testów jednostkowych, to jednak pomimo tego kod powinien być przystosowany do ich stosowania? I gdzie deklarować interfejsy zamiast konkretnych klas, aby dało się testować taką aplikację z użyciem np. PHP Unit?
Go to the top of the page
+Quote Post
nospor
post 6.05.2024, 15:40:37
Post #2





Grupa: Moderatorzy
Postów: 36 468
Pomógł: 6300
Dołączył: 27.12.2004




Cytat
Innym razem poznałem opinię, iż np. taki język programowania Pyton w ogóle nie ma interfejsów i nie ma sensu "onanizować się kodem".

Oczywiscie, piszmy proceduralnie w ogole , po co onaniziowac sie klasami smile.gif

Tak, Python nie ma jako takich interfejsow i programisci robia obejscia sztuczne, by tylko wprowadzic interfejsy. A wystarczyloby by Python przestal byc 100 lat za murzynami wink.gif
Pisze w Python o paru miesiecy i tak mi brakuje porzadnej obiektowki ze glowa mala. powrot do _zmienna by informowac innych userow ze to zmienna prywatna to poprostu koszmar. Nie zmienia to faktu, ze Python jest o niebo lepszy niz php do rzeczy, ktore aktualne tam robie wiec siedze cicho biggrin.gif

Cytat
Czy jeśli nie mam zamiaru stosować w mojej aplikacji testów jednostkowych, to jednak pomimo tego kod powinien być przystosowany do ich stosowania?

Interfejsy stosuje sie nie tylko pod testy. Generalnie dzieki interfejsom, twoj kod jest porzadniejszy, latwiej rozszerzalny i wszystko to o czym gada SOLID.
Choc w praktyce, ja czesto mam lenia i lece po konkretnej klasie i nie tworze interfejsu bo i tak wiem, ze w tym kodzie bedzei tylko jedna klasa. Mowie tu o kontrolerach.
Gdy robie juz jakis Service to wtedy staram sie leciec po interfejsach, choc i to nie zawsze. Czasami wiem, ze mimo ze to Service, to on i tam przyjmowac bedzie zawsze te jedna klasie wiec sie nie bawie w interfejsy. A do testow jednostkowych robie poprostu MOCKa tej klasy i wszystko chula


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
Salvation
post 6.05.2024, 15:46:27
Post #3





Grupa: Zarejestrowani
Postów: 357
Pomógł: 70
Dołączył: 15.07.2014

Ostrzeżenie: (0%)
-----


SOLID nie zostało wymyślone pod testy, a po to, by kod był bardziej abstrakcyjny i przystosowany do konsumpcji różnych obiektów o tym samym typie.
Mamy np. Interface Animal, więc wrzucamy do metody Animal $animal i wywołujemy np. metodę canRun(), która zwraca true lub false. Nie interesuje nas czy "wrzucone" Zwierzę, to Kot, Pies, Ptak czy Ryba. I o to w całym tym zamyśle chodzi.

A pisanie kodu wg zasad SOLID (czy teraz już CUPID), a najlepiej także wg metodologii TDD, znacznie uprości kod. Nie tylko w testach.
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Wersja Lo-Fi Aktualny czas: 19.05.2024 - 13:19