![]() |
![]() |
![]()
Post
#1
|
|
Grupa: Zarejestrowani Postów: 114 Pomógł: 0 Dołączył: 3.08.2017 Ostrzeżenie: (0%) ![]() ![]() |
Nie czuję do końca stosowania interfejsów w mojej aplikacji... Poniżej podaję, jak to obecnie wygląda. Może tak zostać bądź coś poprawić?
Utworzyłem interfejs Mysqli dla klasy Database: Kod <?php declare(strict_types=1); namespace App\Core; interface Mysqli { public function dbConnect(): void; public function dbClose(): void; public function dbQuery(string $query): mixed; public function dbFetchArray(mixed $result): array|null|false; public function dbNumberRows(mixed $result): int; public function dbAffectedRows(): int; public function dbInsertId(): int; public function dbStartTransaction(): bool; public function dbCommit(): bool; public function dbRollback(): bool; } Interfejs Mail jest implementowany przez Email: Kod <?php declare(strict_types=1); namespace App\Core; interface Mail { public function sendEmail( string $serverName, string $emailFrom, string $emailTo, string $subject, string $message ): bool; } Oraz interfejs Validator jest implementowany przez abstrakcyjne klasy Code, Error i Message, które są potem rorszerzane przez podklasy odpowiedziane za validację (np. MainPageValidator) danych z formularzy czy api: Kod <?php declare(strict_types=1); namespace App\Core; interface Validator { public function isValid(): bool; } Wypadałoby dodać jeszcze inne interfejsy dla moich klas tutaj? Trochę nie czuję, gdzie powinienem stosować interfejsy... |
|
|
![]() |
![]()
Post
#2
|
|
Grupa: Moderatorzy Postów: 36 559 Pomógł: 6315 Dołączył: 27.12.2004 ![]() |
1) Napisales ktore klasy implementuja ktore interfejsy, ale wchodzac w ich kod, nie widze zadnej implementacji.
2) Po co ten przedrostek "db" ? 3) public function dbQuery(string $query): mixed { return mysqli_query($this->mysqlLink, $query); } Ta metoda powinna zwracac bool a nie zasob mysqli. Po to sie robi interfejsy, by klasa byla uniwersalna a nie ty wymuszasz na nas znajmosc faktu iz zwraca jakis zasob mysqli. Mnie, jako uzytkownika tej klasy guzik obchodzic powinno czy to mysqli, czy mysql czy pdo. wykonuje query, a potem chce pobrac rekordy z tego query. wiec np. ten zasob powinien byc trzymany w klasie. Z drugiej strony, moze byc faktycznie sytuacja, gdzie na raz wykonujesz dwa zapytania, np petla w petli i wtedy ten zasob jest potrzebny. No ale to mozna rozwiazac inaczej, np. klasa nie zwraca zasob ale number zasobu, i zasoby nadal so trzymany w klasie w tablicy, albo jak chcesz zwracac zasob, to moze warto tez zrobic to na interfejscie DBResource 4) interface Mysqli Nie, masz zrobic interface DB, a potem klase MysqlI ktore go implementuje. Interfacy sluza by mowic o czym ogolnie, a nie robisz interface pod dana klase od razu |
|
|
![]() ![]() |
![]() |
Aktualny czas: 13.10.2025 - 20:17 |