Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [PHP] Logowanie, zwrot/wypozyczenie ksiazek OOP - mocno początkujący
mrpickles
post 14.10.2019, 18:03:39
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 smile.gif
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
athabus
post 18.10.2019, 10:02:48
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.
Go to the top of the page
+Quote Post

Posty w temacie
- 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
- - 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


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: 30.05.2024 - 20:14