Post
#1
|
|
|
Grupa: Zarejestrowani Postów: 14 Pomógł: 0 Dołączył: 14.10.2019 Skąd: Białystok Ostrzeżenie: (0%)
|
Cześć,
Zaczynam naukę OOP i w napisałem skrypt który umożliwia rejestracje/logowanie/zwrot/wypożyczenie książek. Mam świadomość istnienia SOLID oraz PSR - czytałem o PSR 1 / 2 i staram się przestrzegać. Nie znam MVC ani testów np. PHPUnit - to będą kolejne kroki w nauce. Czy taki skrypt można określić obiektowym, czy jest to jakaś hybryda? Zanim pójdę dalej jw chciałbym nauczyć się dobrych nawyków i w prawidłowy sposób posługiwać się OOP. Skrypt nie wszedł na forum, umieściłem na githubie Link do GitHub Moje dodatkowe pytania: 1. Tworzenie obiektu Database w konstruktorze innych klas, czy jest to prawidłowe? 2. Metoda checkCredentials klasy log - czy nie narusza zasady pojedynczej odpowiedzialności? Czy nie powinna np. wyszukiwać użytkownika,a następnie inna metoda powinna weryfikować dane? Dzięki za wszystkie uwagi i poświęcony czas (IMG:style_emoticons/default/smile.gif) |
|
|
|
![]() |
Post
#2
|
|
|
Grupa: Zarejestrowani Postów: 898 Pomógł: 48 Dołączył: 2.11.2005 Skąd: Poznań Ostrzeżenie: (0%)
|
No prosze a już myślałem, że się poddałeś ;-)
Kod wygląda o niebo lepiej niż pierwsza wersja - wreszcie zaczyna przypominać jakąś strukturę używaną w 21 wieku, więc widać że czasu nie zmarnowałeś. Ale nie będę Ci tu słodził bo nie po to tu piszesz. Moje uwagi - brak konfiguracji o czym pisał nospor - rzeczy, które mogą się zmieniać powinny być wydzielone do osobnego miejsca. Np. plik yaml + obiektowy wraper na to pozwalający odczytywać dane konfiguracyje - jak używasz static to na 99% możesz być pewien, że popełniasz błąd projektowy. Static to taki nowy stan globalny i z aplikacji powinien zniknąć, bo w ten sposób ukrywasz niepotrzebnie zależności. Wszystkie zależności powinny być wstrzykiwane przez konstruktor choćby dlatego, że wtedy widzisz, ze robi się ich w pewnym momencie za dużo i jest pora na refactoring. Tak więc moja rada - usuń wszystkie odwołania static. - brakuje mi w Twoim kodzie obiektów Request / Response. Echo powinno pojawić się w kodzie aplikacji tylko raz, gdy renderujesz Response. U ciebie tekst jest printowany w kontrolerach, autoryzacji itp. Masz różne dziwne kontrukcje typu przekierowanie headerem w kontrolerze itp... Tak nie powinno być - powinieneś mieć obiekt Response - najlepiej w kilku odmianach typu "NotAuthorizedResposne / NotFoundResponse / RedirectResponse" itp. Contoller powinien zwracać taki Response i front controller albo powinien decydować co dalej z tym zrobić. W ten sposób bedziesz miał piękne polimorficzne kontrollery, które zawsze będą zachowywać się tak samo, czyli zwracać obiekt ResponseInterface lub AbstractResponse. Ewentualnie zamiast zwracać niektóre Respony można rzucać wyjątki typu NotFoundException i przechwytywać je we frontkontolerze (gdyby go miał). - Brakuje mi obiektu FrontController - > to ten obiekt powinien inicjować Request, Router i obsłgiwać Response zwrócony z kontrolera - Pytałeś o dziedziczenie po kontrolerze - tutaj jak najbardziej moim zdaniem ma to sens, bo kontroler ma dużo kodu, który jest wszędzie potrzebny, więc dziedziczenie jest uzasadnione.Warto byłoby aby była to klasa abstrakcyjna. - kod ciągle nie jest zgodny z PSR Ogólnie błędów jest sporo więcej, ale jak poprawisz to + to co napisał nospor możemy iść dalej ;-) Gratki za postępy. |
|
|
|
mrpickles [PHP] Logowanie, zwrot/wypozyczenie ksiazek OOP - mocno początkujący 14.10.2019, 18:03:39
viking Najpierw zastosuj autoloader, potem wyrzuć wszystk... 14.10.2019, 18:38:18
ohm klasa Log jest dość mocno myląca, brak namespace... 14.10.2019, 20:13:08
mrpickles 1. Dodałem autoloadera
2. Nie znam smarty ani inne... 15.10.2019, 20:06:49
athabus Niestety trochę błądzisz, ale moim zdaniem to bard... 15.10.2019, 21:03:22
mrpickles Tak wiem, błądzę muszę poukładać wiedze.
1. zrobi... 17.10.2019, 21:00:47
viking Przykładowo ta nieszczęsna klasa database. W przyp... 18.10.2019, 07:24:15
mrpickles Usunąłem vendor/autoload w klasach - pozostałość b... 18.10.2019, 09:39:59
athabus Ogólnie po zmianach wygląda już znacznie lepiej. P... 18.10.2019, 10:02:48
viking https://martinfowler.com/eaaCatalog/
Dlaczego głów... 18.10.2019, 10:03:49
nospor Njapierw klasa dziedziczy po Database
class Regist... 18.10.2019, 10:21:30
athabus Jeszcze taka ogólna uwaga odnośnie dziedziczenia. ... 18.10.2019, 10:36:44
mrpickles Ustosunkuje się tylko niektórych elementów, bo dos... 18.10.2019, 11:49:49 
nospor Cytat(mrpickles @ 18.10.2019, 11:49:4... 18.10.2019, 12:15:38
athabus To o czym piszesz to jest częsty błąd w tutorialac... 18.10.2019, 12:14:40
mrpickles Zakręciłem się i pracowałem na klonie, a zrobiłem ... 18.10.2019, 13:12:23
nospor Generalnie nie chodzi o odzielenie php od html a o... 18.10.2019, 13:33:05
mrpickles Ok czyli MVC się kłania. Dzięki za wyjaśnienia, ... 18.10.2019, 13:37:07
phpion Wiele już zostało powiedziane ale ja dodam od sieb... 3.11.2019, 18:59:27
mrpickles Trochę mnie nie było, jednak musiałem przyswoić do... 19.11.2019, 19:34:39
nospor Jest zdecydowanie lepiej.
echo View::renderTempl... 20.11.2019, 10:53:34
mrpickles Dzięki za uwagi:)
1) Powalczę z gitem - zamiast n... 21.11.2019, 16:45:44
athabus Tak w telegraficzny skrócie, to to co zaproponował... 21.11.2019, 17:19:04
viking Możesz też zmienić podejście i poczytać o https://... 21.11.2019, 18:53:53
mrpickles Utknąłem, nie mam pomysłu, przeglądałem dokumentac... 5.12.2019, 22:28:48
athabus Najprościej chyba możesz to zrobić przechwytując w... 6.12.2019, 21:45:45
mrpickles Zrobiłem tak, że kontroler zwraca Response, a w Ru... 8.12.2019, 20:51:37
nospor Widze nadal kodu nie testujesz
FrontController.ph... 7.01.2020, 16:34:45
mrpickles Przez ostatni czas przerabiałem Laravela, teraz wr... 29.02.2020, 14:31:25
nospor Zrozum, rzeczy konfiguracyjne nie moga lezej w GIT... 29.02.2020, 17:49:42
mrpickles Dzięki teraz wiem o co chodzi. Tak używam laravela... 1.03.2020, 00:11:46 ![]() ![]() |
|
Aktualny czas: 14.01.2026 - 21:54 |