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

Formularz rejestracji PHP OOP

VPS Starter Arubacloud
+2 głosów
563 wizyt
pytanie zadane 22 maja 2017 w PHP przez ŁukaszD. Użytkownik (540 p.)
Witam

Planuję stworzyć system rejestracji w sposób obiektowy i zastanawiam się nad projektowaniem klas. Szkicuję sobie następujący plan:

-Intreface Validator posiadający abstrakcyjną metode validate();

-klasy szczegółowych validatorów: NicknameValidator, NameValidator, PasswordValidator itd. posiadające metodę validate() w której jest zaimplementowane sprawdzanie poszczególnych danych.

-klasy User posiadającą właściwości Nickname, Name, Password itd. oraz między innymi metodę validate(), która zawierałaby metody validate() poszczególnych validatorów.

Czy mój tok rozumowania jest właściwy? Z góry dziękuję za pomoc.

1 odpowiedź

0 głosów
odpowiedź 22 maja 2017 przez Boshi VIP (100,240 p.)
każda metoda interfejsu jest zawsze abstrakcyjna :)

Pomysł z róznymi klasami validatorów implementującymi dany interfejs nie jest zły moim zdaniem. Klasa user nie powinna zawierać metody validate bo to nie jej zależność. Jedynie powinna wykorzystywać validatory stworzone wcześniej.

Problemem będzie tutaj zaprojektowanie w taki sposób, abyś nie musiał odpalać wszystkich validatorów ręcznie w warunku. Czyli dobrze było by zrobić coś na zasadzie, że jak przychodzi żądanie o utworzenie nowego usera to wywołanie np metody isValid() odpala pod spodem wszystkie wymagane validatory. Zapewne musiałbyś przekaząc dany model usera.
komentarz 22 maja 2017 przez ŁukaszD. Użytkownik (540 p.)
Mam jeszcze pomysł, aby utworzyć klasę RegisterValidator, która właśnie odpalałaby te konkretne validatory. Wtedy np. łatwo by było dodać klasę LoginValidator sprawdzającą formularz logowania.
komentarz 22 maja 2017 przez Boshi VIP (100,240 p.)
Siądź i rozpisz sobie to na kartce wszystko, razem z metodami i wywołaniem dla poszczególnych modeli.

I ogólnie to mozna nazwać OOP, projektem systemu a nie jak wielu myśli, że klepnie klasę stworzy obiekt i pisze obiektowo...
komentarz 23 maja 2017 przez Ehlert Ekspert (212,630 p.)

Pachnie komponentem formularzy z Symfony. laugh

komentarz 7 czerwca 2017 przez Benek Szeryf (90,690 p.)

Pomysł z róznymi klasami validatorów implementującymi dany interfejs nie jest zły moim zdaniem.

A czy nie lepiej w takim przypadku zastosować klasę abstrakcji? Właśnie tworzę silnik walidatora i zmieniłem interfejs:

<?php

interface ValidatorInterface
{
    public function __construct(array $parameters);
    public function validate($value);
}

na klasę abstrakcji:

abstract class ValidationAbstractClass
{
    private $message;

    abstract public function __construct(array $parameters);
    abstract public function validate($value);

    public function getMessage()
    {
        return $this->message;
    }
}

z tego względu, że wszystkie klasy różnych walidatorów posiadały atrybut wiadomość wraz z getterem. Interfejs w końcu mówi czym obiekt jest, a klasa abstrakcyjna podpowiada co obiekt ma robić. Skoro mamy definiować klasy poszczególnych walidatorów (długość łańcucha, zakres liczb itp.), to już wiemy czym one są i interfejs wydaje się zbędny.

Poza tym właśnie znalazłem słabą stronę interfejsów oraz klas abstrakcyjnych. Możemy narzucić, by klasa jednego z walidatorów implementowała pewne metody, jednak nie możemy zmusić jej do tego, jaki typ ma zwracać. W przypadku interfejsu jest to niemożliwe, bo nie ma ciała metody. W przypadku klasy abstrakcyjnej też jest to niewykonalne, bo każda klasa walidatora waliduje dane na swój sposób i nie jesteśmy w stanie zawrzeć tego w jednej metodzie validate() klasy abstrakcyjnej. Zresztą byłoby to pogwałcenie SOLID-nych praktyk.

Podobne pytania

+2 głosów
2 odpowiedzi 1,486 wizyt
pytanie zadane 9 grudnia 2017 w PHP przez patrus456 Początkujący (290 p.)
+1 głos
1 odpowiedź 177 wizyt
pytanie zadane 11 lutego 2022 w PHP przez ZnaQu Nowicjusz (130 p.)

92,417 zapytań

141,222 odpowiedzi

318,984 komentarzy

61,831 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

Akademia Sekuraka 2024 zapewnia dostęp do minimum 15 szkoleń online z bezpieczeństwa IT oraz dostęp także do materiałów z edycji Sekurak Academy z roku 2023!

Przy zakupie możecie skorzystać z kodu: pasja-akademia - użyjcie go w koszyku, a uzyskacie rabat -30% na bilety w wersji "Standard"! Więcej informacji na temat akademii 2024 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!

...