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%)
|
Ogólnie po zmianach wygląda już znacznie lepiej. Postaram się dać trochę uwag - to jeszcze nie wszystko co rzuciło mi się w oczy, ale nie chcę Cię wszystkim przytłaczać na raz.
1. GIT - w gicie masz coś takiego jak .gitignore pozwalające na nie commitowanie pewnych plików. Dla przykładu w 99% projektów nie komituje się vendorów, a już na pewno nie powinieneś commitować cachu od fixera, czy innych cachy/logów. Tu przy okazji będziesz miał fajne ćwiczenie jak przestać śledzić zmiany w repo czegoś co omyłkowo commitowałeś. No i zdecydowanie popracuj nad opisywaniem commitów - opis powinien być jasny i klarowny, a nie @Update. Jak będziesz kiedyś robił repo, które chcesz pokazać pracodawcy, to historia commitów jest często przeglądana. W firmach zazwyczaj pracuje się w systemach zadaniowych i opis kommita wygląda tak: [Task-abc] Opis taska. 2. PHP coś z tym fixerem poszło nie do końca ok, bo w wielu miejscach nadal masz kod niezgodny z PSR - np. $a=1 powinno być $a = 1; Ogólnie sporo masz tam jeszcze w kwestii PSR do poprawienia. Ale znów - jeśli myślisz o pracy zawodowo, to jest coś na co pracodawcy baaaardzo zwracają uwagę, więc wyrabiaj sobie nawyki. 3. Piszesz, że walczysz z diffem - są do tego narzędzia, które pokazują graficznie. Ja korzystam akurat z wbudowanego w PhpStorma, ale to płatne oprogramowanie, więc pewnie musisz poszukać jakiś alternatyw - może vscode ma podobne wtyczki, albo jakiś wyspecjalizowany edytor. W PphSotrm jest nawet opcja wpięcia fixera jako plugin, który sam poprawia PSR w pliku. Umiejętność pracy z Diffem jest kluczowa w pracy zespołowej, gdzie musisz sprawdzić co kto i kiedy zmieniał. Warto nad tym pracować. 4. Komentarze. Ogólnie tutaj szkoły są różne. Ja jestem zwolennikiem, że kod powinien się dokumentować sam, gdzie tylko to możliwe. Ogólnie komentarze powinny być stosowane gdy wnoszą coś nowego - jeśli są redundantne z metodą to są zbędne. Spójrz tutaj: Kod /*Row Count*/ public function rowcount():int { return $this->stmt->rowcount(); } /** * checking credentials * @param array $argument1 array structure to verify credentials * @return bool Return bool if credentials are correct */ public function checkCredentials(array $data) :bool {} Te dwa komentarze nie wniosły NIC oprócz dodatkowego kodu, który trzeba teraz utrzymywać i poprawiać jak robisz refaktor metod. Przydatne komentarze Kod /** * @return OrderItemInterface[] * @throws NoSuchEntityException */ protected function getItems(int $orderId): array {... } Tutaj komentarz coś wnosi bo informuje że w tablicy zwróconej przez metodę dostanę obiekty danego typu + że metoda może rzucić wyjątek danego typu. Zobacz, że już parametru nie ma w komentarzu, bo wszystko wynika z nagłówka metody. 5. Chyba już powoli warto zacząć się zastanawiać nad ubraniem tego w strukturę. Na początek poradziłbym Ci stworzyć wspólny entrypoint dla całej aplikacji. Pokombinuj jak to zrobić, aby wszystkei requestty uderzały w jeden punkt (index.php). W ten sposób wyeliminujesz potrzebę używania require w całej aplikacji. Na początek możesz to zrobić po prostu w formie frontcontrollera, choć docelowo pewnie raczej powinien to byś typowy plik inicjujący aplikację, a front controller już powinien być osobno. Niemniej na razie możesz to zrobić w 1 pliku i potem pomyśleć jak zrobić Refaktor. 6. Podoba mi się, że sam użyłeś strict_types - chyba o tym nie pisałem, a widzę że w klasach się pojawił. 7. Odnośnie pytania z ostatniego postu - łatwiej będzie to ogarnąć przekierowaniem na stronę z odpowiednim komunikatem bo ładnie obsłużych to na wyższym poziomie niż w szablonie. |
|
|
|
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
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
athabus No prosze a już myślałem, że się poddałeś ;-)
Ko... 21.11.2019, 08:36:44
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 - 10:03 |