Wpis z mikrobloga

Mirki, uczę się #php i zrobiłem sobie zadanko zapostowane jakiś czas temu na mirko, starając się stosować w praktyce rzeczy, których ostatnio się nauczyłem. Mógłbym prosić kogoś mądrego o rzuceniem okiem na kod (nie ma tego dużo) i wytknięcie błędów / złych praktyk?

[[Link do githuba]](https://github.com/retrowaver/Transiter)

Uwagi: Starałem się stosować MVC (ale jakby bez View, bo tu sprowadza się tylko do wyświetlenia JSONa). Pierwszy raz ever pisałem testy i nie wiem czy w obecnej postaci mają sens (na pewno brakuje paru, zwłaszcza sprawdzających bazę danych).

#naukaprogramowania #codereview #programowanie
  • 18
@rtrv: na pierwszy rzut oka:
użyj php7, typowania zmiennych, za dużo ifów w controllerze, zrób z tego jakąś fabrykę/strategię.
Za dużo wzorca IFLETON!
Poczytaj sobię zasady SOLID, KISS, DRY
Starałem się stosować MVC (ale jakby bez View, bo tu sprowadza się tylko do wyświetlenia JSONa)


@rtrv: I jakby bez Model ( ͡° ͜ʖ ͡°) Całą logikę z kontrolerów wynieś do osobnych serwisów.
I formatowanie kodu ( ͡° ʖ̯ ͡°)

@rtrv:
1. Jako root domeny z plikiem index.php zrób katalog public projektu. Nie będziesz potrzebował tych sztuczek z defined("DIRECT_ACCESS") OR exit;. Skrypt niech sobie zrobi require_once dirname(__DIR__) . '/src/bootstrap.php'; czy co tam mu trzeba.
2. Kontrolery nie są od przetwarzania danych - to jest część aplikacji, którą byś bez problemu wymienił w przypadku innego sposobu ich dostarczania (komenda+parametry z konsoli, import z pliku, pobrane wcześniej z innego serwisu...itp). W tym
defined("DIRECT_ACCESS") OR exit;

@rtrv: Jak pisał kolega wyżej, wyrzuć kod poza public. A nawet jeśli ktoś odpali skrypt klasy bezpośrednio z poziomu www, to co z tego? Przecież nic się nie wykona, nie zainicjuje. Skrypt się zakończy. Nic nie wycieknie. Więc niepotrzebnie to wrzucasz i powodujesz, że kod nie będzie re-używalny w innym projekcie, który takiej stałej nie definiuje.
Do tego zasada: skinny controllers, fat models. Tylko model to nie sama
@rtrv: Jest postęp. Dobry kierunek! ( ͡° ͜ʖ ͡°)
Nie mam czasu przeglądać wszystkiego, ale tak po łebkach to bym sugerował wyrzucić zawartość tych złożonych funkcji kontrolerów do serwisów. Kontroler im mniejszy tym lepszy.
Najlepiej, żeby wywoływał metodę jakiegoś serwisu. Wtedy jak będziesz chciał przenieść swój projekt na jakikolwiek framework, to zrobisz to w mig kopiując wywołania metod serwisu do akcji kontrolera, zamiast całe ciała funkcji, parametry,