Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> URL shortener - Symfony 4.
smk
post
Post #1





Grupa: Zarejestrowani
Postów: 8
Pomógł: 0
Dołączył: 15.06.2018

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


Witam.
Prosiłbym Was o code review aplikacji do skracania adresów (IMG:style_emoticons/default/smile.gif) Czym więcej feedbacku, tym lepiej!
https://github.com/selfmadeking/URL-shortener-Symfony-4
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
athabus
post
Post #2





Grupa: Zarejestrowani
Postów: 898
Pomógł: 48
Dołączył: 2.11.2005
Skąd: Poznań

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


Kurcze, aż szkoda żeby taki fajny temat się zmarnował, więc choć się nie znam, to pierwszy rzucę kamieniem - może bardziej doświadczeni koledzy się przyłączą ;-)

Po pierwsze bardzo nie podoba mi się brak typowania zmiennych i pól w klasie.

  1. private $urlGeneratorService;
  2. private $em;
  3.  
  4. public function __construct(UrlGeneratorService $urlGeneratorService, EntityManagerInterface $em)
  5. {
  6. $this->urlGeneratorService = $urlGeneratorService;
  7. $this->em = $em;
  8. }


Dlaczego pola klasy nie mają docka z typami? Przecież korzystasz z phpstorma, a on potrafi wygenerować - stajesz na parametrach konstruktora i klikasz alt+enter....

Większość funkcji nie ma typowania zmiennych na wejściu, ale jednocześnie w niektórych miejscach masz typowanie na wyjściu, czyli używasz php 7.1+ - brakuje konsekwencji. W każdym razie mz w jakiś sposób trzeba parametry opisać - albo phpdock albo typowanie.

Zaciekawiła mnie funkcja, którą wezmę jako przykład na warsztat.
  1. public function userIsAuthorOfList($list)
  2. {
  3. $urls = $list->getListOfUrls();
  4. $userId = $this->security->getUser();
  5. if (isset($userId)) {
  6. $userId = $userId->getId();
  7. }
  8. $userIdOfUrl = $urls->first()->getUserId();
  9. if (isset($userIdOfUrl)) {
  10. $userIdOfUrl = $userIdOfUrl->getId();
  11. }
  12.  
  13. return (bool) $userIdOfUrl == $userId;
  14.  
  15. }


$list - nie jest typowana na wejsciu. Co to jest - jakiś obiekt, zmienna skalarna, tablica? Lista czego?
Dalej w tej samej funkcji masz:
  1. $userId = $this->security->getUser();
  2. if (isset($userId)) {
  3. $userId = $userId->getId();
  4. }
  5.  


Czyli co zmienna $userId jest tak na prawdę obiektem User, ale za chwilę zamieniasz ją na skalarne Id? Zupełnie bez sensu bo kompletnie psuje czytelność kodu.

W tej funkcj imasz coś takiego:
  1. $userIdOfUrl = $urls->first()->getUserId();

Co tak na prawdę jest $userIdOfUrl = $list->getListOfUrls()->first()->getUserId();
Poczytaj o Lod (Law of Demeter) - raczej powinno być coś w stylu $list->getUser() lub $list->getUserId(); Zresztą nie sprawdzałem, ale mogę się założyć, że w innych częściach systemu robisz coś podobnego, aby sprawdzić użytkownika listy = duplika kodu, czyli tym bardziej warto to zrefaktoryzować.

Po co rzutujesz wartość bool do bool w tym miejscu? To chyba zbędne.
  1. return (bool) $userIdOfUrl == $userId;



Ogólnie ta funkcja to idealny kandydat do refactoringu na wielu płaszczyznach. Powinno się ją sprowadzić do 2-3 linijek.

Kilka luźnych uwag:
- servisy nie powinny raczej zapisywać niczego do flash - to rola kontrolera - serwis może być wykorzystywany w inny sposób (np. api/cli itp).
- logując wyjątek logujesz tylko sam message - mało to przydatne przy debugowaniu lepjej zrobić $logger->error((string)$e)
- w symfony if ($form->isSubmited() && $form->isValid()) możesz zastąpić if ($form->isValid()) - bo metoda isValid sprawdza między innymi czy form jest wysłany.


To takie moje 0,05pln żaby rozpocząć temat. Niestety nie mam teraz czasu na wgryzienie się w Twój system i pisanie czegoś więcej o logice itp, dlatego tylko kilka uwag co do samego sposobu kodowania. Dodam, że raczej mistrzem kodowania nie jestem, więc traktuj moje uwagi jako wymianę zdań.
Go to the top of the page
+Quote Post
Lion
post
Post #3





Grupa: Zarejestrowani
Postów: 148
Pomógł: 14
Dołączył: 23.02.2013

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


Cytat(athabus @ 23.08.2018, 22:25:44 ) *
Po pierwsze bardzo nie podoba mi się brak typowania zmiennych i pól w klasie.

  1. private $urlGeneratorService;
  2. private $em;
  3.  
  4. public function __construct(UrlGeneratorService $urlGeneratorService, EntityManagerInterface $em)
  5. {
  6. $this->urlGeneratorService = $urlGeneratorService;
  7. $this->em = $em;
  8. }


Dlaczego pola klasy nie mają docka z typami? Przecież korzystasz z phpstorma, a on potrafi wygenerować - stajesz na parametrach konstruktora i klikasz alt+enter....


PHPStorm poradzi sobie z wykryciem typów pól określonych w konstruktorze. Dodawanie docblocków w tym przypadku jest nadmiarowe.

Przy okazji, wrzucanie do repo informacji o ide tylko je zaśmieca.
Go to the top of the page
+Quote Post

Posty w temacie
- smk   URL shortener - Symfony 4.   17.08.2018, 16:34:55
- - athabus   Kurcze, aż szkoda żeby taki fajny temat się zmarno...   23.08.2018, 21:25:44
|- - Lion   Cytat(athabus @ 23.08.2018, 22:25:44 ...   23.09.2018, 09:30:48
- - Pyton_000   Jedna uwaga do Form->isValid. Owszem sprawdza a...   24.08.2018, 08:07:15
- - athabus   No proszę, człowiek uczy się całe życie. Zawsze dl...   26.08.2018, 17:15:12
- - Pilsener   Jak powyżej, np. taka metoda: [PHP] pobierz, plai...   1.09.2018, 22:14:03
- - Pyton_000   Odniosę się do pkt.6 z którym się nie zgodzę. Nie ...   2.09.2018, 09:49:50
- - viking   Swoją drogą tam wzorzec na url jest niepoprawny. N...   2.09.2018, 09:54:35
- - athabus   Z if'ami każdy ma swoją teorię. Ja akurat też ...   2.09.2018, 15:22:32
- - Pilsener   Cytatdruga mnie trochę przyprawia o ból głowy - bo...   2.09.2018, 20:07:19
- - nospor   Cytat- jest taka zasada w programowaniu "don...   3.09.2018, 10:53:23
- - athabus   Kurcze Pilsener dla mnie 2 wersja jest bardziej cz...   3.09.2018, 15:07:55
- - Pilsener   Cytatodnosisz sie do wypowiedzi Pytona wyrwanej z ...   4.09.2018, 09:45:20
- - athabus   Zgadzam się, że nie można na zasady patrzeć ślepo ...   4.09.2018, 19:29:26
- - athabus   Ciekawe, że każdy ma swoje standardy w kwestii kod...   24.09.2018, 14:45:59
- - nospor   Na szczescie w nowym wydaniu php bedzie mozna typo...   24.09.2018, 14:49:29
- - athabus   Chyba czytasz w moich myślach, bo właśnie miałem n...   24.09.2018, 14:54:18
- - nospor   CytatNo to jeszcze poproszę return type mixed przy...   24.09.2018, 15:03:38
- - athabus   Czasami sa sytuacje, ze nie da sie w php przewidzi...   24.09.2018, 16:29:57
- - nospor   Jesli nie wiesz, co bedzie zwracac twoja funkcja, ...   24.09.2018, 18:41:44
- - athabus   Czy ja wiem czy zle zaprojektowany. Php ma w sobie...   24.09.2018, 19:22:12
- - nospor   CytatObject tu tematu nie rozwiaze, bo w takiej ta...   25.09.2018, 10:36:37
- - Pyton_000   Nie ma takiej sytuacji że nie da się tego opisać j...   25.09.2018, 16:58:11
|- - borabora   Cytat(Pyton_000 @ 25.09.2018, 17:58:1...   27.09.2018, 07:21:27
|- - athabus   Cytat(Pyton_000 @ 25.09.2018, 17:58:1...   7.10.2018, 14:55:56
- - Pyton_000   Null jest dość specyficzny. Ale taki prototyp fun...   27.09.2018, 07:34:34


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

 



RSS Aktualny czas: 14.10.2025 - 05:58