sql >> Databáze >  >> RDS >> Mysql

Je prodlužování tříd dobrou praxí?

Jednoduché pravidlo:pokud se třída extends jiná, pak tato třída je tato nadřazená třída (pouze mírně pozměněná nebo rozšířená). Tuto podřízenou třídu můžete absolvovat namísto nadřazené třídy. Příklad:

class Foo { }

class Bar extends Foo { }

function baz(Foo $foo) { }

baz(new Bar);

Funguje to, baz() očekává Foo ale také přijímá Bar , protože Bar je a Foo .

Nyní je vaši Users a Database ? Ne. Vaši uživatelé nejsou databáze. Vaši uživatelé používají databáze. Pokud vůbec, měli byste použít složení :

class User {

    protected $database;

    public function __construct(Database $database) {
        $this->database = $database;
    }

}

Třída by měla být jaké jsou její odpovědnosti . Odpovědností třídy správy uživatelů je správa uživatelských dat. Část toho může zahrnovat komunikaci s databází, ale to neznamená, že třída správy uživatelů je databáze. Pokud User extends Database , to znamená, že může dělat vše, co Database třída umí (a další). To znamená, že můžete použít User třída všude místo Database třídy, a to nedává smysl. Udržujte povinnosti oddělené.

Nyní je stále diskutabilní, zda je to správná struktura nebo ne, ale jde to správným směrem. Možná ale opravdu budete chtít mít User třída, která představuje jednoho uživatele . Poté máte UserManager nebo UserORM nebo UserStorage nebo cokoli jiného, ​​co se týká získávání a ukládání User objektů v databázi. Tato třída zase používá Database udělat právě to. Tím jsou odpovědnosti jasné a oddělené. User třída představuje uživatelská data, Database třída interaguje s databází, UserORM/Manager/whatever uprostřed vyjednává mezi těmito dvěma.



  1. PDO ve výkonu mysql

  2. odstranit duplicitní řádky a je třeba ponechat jeden ze všech v mysql

  3. Skalární vkládání UDF v SQL Server 2019

  4. mysqldump z dotazu