DbM Framework - Autorska aplikacja frameworka opartego na wzorcu MVC |
DbM Framework - Autorska aplikacja frameworka opartego na wzorcu MVC |
20.12.2023, 21:40:29
Post
#1
|
|
Grupa: Zarejestrowani Postów: 569 Pomógł: 6 Dołączył: 21.07.2008 Ostrzeżenie: (0%) |
Witajcie,
miałem chwilę i usiadłem do autorskiego frameworka opartego na wzorcu MVC. Chciałbym go dopracować, utworzyć wersje stabilną. Kod frameworka jest dostępny pod adresem: https://github.com/artimman/dbmframework Zakończyłem pierwszy test aplikacji na serwerze zdalnym - powodzeniem. Wydaje się, że już jest całkiem Ok i ciekawe, czy ktoś się ze mną zgodzi? -------------------- I welcome you on the Internet >>> Design by Malina
|
|
|
8.01.2024, 09:20:34
Post
#2
|
|
Grupa: Zarejestrowani Postów: 569 Pomógł: 6 Dołączył: 21.07.2008 Ostrzeżenie: (0%) |
1. Jak sprawić, aby widział klasę App\Config\Constants, czy takie umieszczenie stałych w tym pliku jest ok?
Czy plik może zostać w katalogu, w którym się znajduje, czy należy przenieść do katalogu application (autoloader). Wówczas będzie widoczny i wszystko ok. 2 i 3. w katalogu /vendor/ zostawię tylko autoloading i dodałem informacje co jak w README.md 4 - 9.. zrobione 10. sprawdziłem metoda nie była w ogóle używana, więc została usunięta 12 i 13 Jeżeli SINGLETON nie jest zalecane, zróbmy tak jak powinno być z Dependency Injection Próbowałem zrobić, ale coś nie za bardzo idzie, zacząłem poprawiać od: Kod class DatabaseClass extends PDO { //private $connect; private $result; //public $pdo; public function __construct() // __construct(PDO $pdo) { try { $dbDSN = "mysql:host=" . DB_HOST . ";dbname=" . DB_DATABASE; $dbOptions = [ PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION, PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES utf8", ]; //$this->connect = new PDO($dbDSN, DB_USER, DB_PASSWORD, $dbOptions); parent::__construct($dbDSN, DB_USER, DB_PASSWORD, $dbOptions); } catch (PDOException $exception) { throw new DbmException($exception->getMessage(), $exception->getCode()); } } ... } Jedno połączenie wszędzie gdzie tylko jest potrzebne wykonanie zapytania. Pytanie jak byś to zrobił, aby wstrzyknąć połączenie w plikach i metodach: Kod class FrameworkClass { ... // User permissions public function userPermissions(int $id): ?string { $database = new DbmDatabase(); // TODO! Jak zmienic, aby bylo OK? $query = "SELECT roles FROM dbm_user WHERE id = ?"; // TODO! Jak to jest z :id lub znakiem zapytania, czy tak samo jest bezpieczne? $database->queryExecute($query, [$id]); if ($database->rowCount() == 0) { return null; } $data = $database->fetchObject(); return $data->roles; } } Kod class TemplateClass { ... /* TODO! Temporary. Change to full htmlUserNavigation() ? */ public static function temp_htmlUser($sessionUserId, $module = null): void { $database = new DatabaseClass(); $userId = (int) $sessionUserId; ... } } Te Class to trochę tak celowo zostawiłem, aby nad tym chwilę pomyśleć jak powinny nazywać się te klasy oraz folder(y) w obecnym /library/dbmframework/ (folder classes, methods) mając na względzie, że może dodałbym zaciąganie tych klas i kodu do katalogu /vendor/. Poza tym np. ExceptionClass.php nie pasuje zmienić na Exception.php -> class Exception {} podobnie też class Database {} i pozostałe miałby zbyt ogólne nazwy, nie za bardzo to mi się podoba, ponieważ trzeba wówczas dodawać aliasy np. Exception as MyException;. Dodatkowo, czy trzymać wszystko w jednym katalogu, czy może lepiej podzielić te pliki i klasy do subkatalogów i dalej co z namespace też zmienić odpowiedni w zależności, czy dzielimy klasy i kod na subkatalogi? Trochę zastanawiające jak poukładać te pliki i klasy w dobrą całość. 14, Jakoś miałem wrażenie, że if ($this->rowCount() > 0) { } jest Ok, bynajmniej logicznie nadal mam takie wrażenie, chociaż bez zagnieżdżenia wygląda lepiej. 15. Metoda ma zwrócić string, nie int i służy do wyświetlania komunikatów w formularzu, więc nie może być throw. Pozbyłem się tych zagnieżdżeń i wygląda lepiej. 16. Dla jasności zmienione na bez skrótów, które jak się okazuje mogą być mylące. Mam prośbę o pomoc w ogarnięciu Dependency Injection w projekcie, bo się przy tym już pogubiłem. Ten post edytował Malinaa 8.01.2024, 09:30:55 -------------------- I welcome you on the Internet >>> Design by Malina
|
|
|
Wersja Lo-Fi | Aktualny czas: 24.09.2024 - 11:04 |