• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

PHP - klasa, która robi tylko jedną rzecz?

Object Storage Arubacloud
0 głosów
206 wizyt
pytanie zadane 27 grudnia 2017 w PHP przez michh123 Bywalec (2,790 p.)

Witam!
 

Przeglądając różne fora wiele razy czytałem, że ogólnie w programowaniu obiektowym jedna klasa powinna robić tylko jedną rzecz. To niby proste podejście, ale jak zwykle wymaga praktyki, bo jak przyjdzie co do czego to ręce się rozkładają, tak jak w moim przypadku. Mam taki fragment kodu:

<?php

class User extends Connect {
    private $data = '';
    
    protected function getAllUsers() {
        $sql = 'SELECT * FROM users';
        if($result = $this->connect()->query($sql)) {
            $numRows = $result->rowCount();

            if ($numRows > 0) {
                foreach ($result->fetchAll() as $row) {    
                    $this->data .= '<tr>';
                    $this->data .= '<td>' . $row['id'] . '</td>';
                    $this->data .= '<td>' . $row['name'] . '</td>';
                    $this->data .= '<td>' . $row['surename'] . '</td>';
                    $this->data .= '<td>' . $row['date_of_birth'] . '</td>';
                    $this->data .= '<td>' . $row['age'] . '</td>';
                    $this->data .= '<td>' . $row['phone_number'] . '</td>';
                    $this->data .= '<td>' . $row['email'] . '</td>';
                    $this->data .= '</tr>';
                }
            } else {
                $this->data = 'Brak rekordów w bazie :(';
            }
            return $this->data; 
        }
        else {
            echo "Błąd :(";
        }
    }
}

Jest to klasa User, która dziedziczy z klasy Connect, w celu połączenia z bazą. I jedyne co robi ta metoda to wyciąga rekordy z bazy i przypisuje je do właściwości data. To jak najbardziej rozumiem. Tylko teraz pytanie, co jeśli chcę to wyświetlić na ekran? Czy stworzyć drugą metodę w klasie User, która właśnie będzie wyświetlała na ekran, czy zrobić to w tej samej metodzie, czy stworzyć zupełnie nową klasę? Ja zastosowałem to trzecie podejście i tym sposobem mam klasę ShowUser, która dziedziczy po klasie User(a ta z kolei po klasie Connect)

<?php

class ShowUser extends User {
    private $datas; 
    
    public function showAllUsers() {
        $this->datas = $this->getAllUsers();   
        echo $this->datas;
    }
}

I oczywiście w pliku index Tworzę instancję klasy ShowUser i wywołuję metodę showAllUsers().

<?php
       $users = new ShowUser();
       $users->showAllUsers();
?>

Moje pytanie brzmi: czy podejście, które zastosowałem jest dobre i czy tak powinienem dalej robić, czy może jednym ze sposobów, o które pytałem wyżej, czy może zupełnie innym sposobem, o którym nawet nie mam pojęcia? Bardzo proszę o pomoc.

Pozdrawiam!

2 odpowiedzi

+1 głos
odpowiedź 27 grudnia 2017 przez mtk3d Nałogowiec (46,690 p.)
wybrane 28 grudnia 2017 przez michh123
 
Najlepsza
To zależy od podejścia. Jeśli działa i osiągnąłeś to co chesz, to jest ok.

Natomiast nie używasz tutaj żadnego wzorca projektowego w zasadzie. Jeśli chcesz użyc popularnego MVC, to masz już model, teraz powinieneś dopisać kontroler i widok.

Kontroler ma pobrać dane i przekazać do widoku a widok dopiero wyświetlić.

Zajrzyj sobie tutaj http://pl.phptherightway.com/ i tutaj https://github.com/domnikl/DesignPatternsPHP
komentarz 28 grudnia 2017 przez michh123 Bywalec (2,790 p.)
Dziękuję za wskazówki i linki!
+2 głosów
odpowiedź 27 grudnia 2017 przez CzikaCarry Szeryf (75,340 p.)
Trochę źle interpretujesz zdanie "klasa powinna robić tylko jedna rzecz". Nie chodzi tu o to, że klasa ma np. tylko pomnożyć A * B czy sprawdzić, czy email jest poprawny. Chodzi o logiczny podział. Np. jeśli chcesz zrobić chat internetowy to nie powinieneś do klasy "A" wsadzać logiki odpowiadającej za rejestrację, wysyłanie wiadomości do znajomych i wstawianie komentarzy. Musisz mieć jakiś logiczny podział, czyli jedna klasa do logowania i / lub rejestracji, druga klasa do walidacji / filtracji danych, kolejna do wysyłania i odbierania wiadomości... I tak dalej, aby wszystko miało ręce i nogi.
komentarz 28 grudnia 2017 przez michh123 Bywalec (2,790 p.)
Dziękuję za wskazówki!

Podobne pytania

0 głosów
2 odpowiedzi 318 wizyt
pytanie zadane 8 kwietnia 2020 w Sprzęt komputerowy przez qwx6 Początkujący (300 p.)
0 głosów
1 odpowiedź 1,257 wizyt
pytanie zadane 20 grudnia 2017 w Sieci komputerowe, internet przez faggbag Nowicjusz (120 p.)
0 głosów
2 odpowiedzi 515 wizyt
pytanie zadane 4 grudnia 2017 w HTML i CSS przez R.orlinski Mądrala (5,490 p.)

92,575 zapytań

141,424 odpowiedzi

319,649 komentarzy

61,960 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...