sql >> Database teknologi >  >> RDS >> Mysql

Er det god praksis at forlænge undervisningen?

Simpel tommelfingerregel:hvis en klasse extends en anden, så er den klasse er denne forældreklasse (kun lidt ændret eller udvidet). Du kan bestå denne børneklasse i stedet for forældreklassen. Eksempel:

class Foo { }

class Bar extends Foo { }

function baz(Foo $foo) { }

baz(new Bar);

Dette virker, baz() forventer en Foo men accepterer også en Bar , fordi Bar er en Foo .

Nu er dine Users en Database ? Nej. Dine brugere er ikke en database. Dine brugere bruger en database. Hvis overhovedet, bør du bruge sammensætning :

class User {

    protected $database;

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

}

En klasse skal være hvad dens ansvar er . Ansvaret for en brugerstyringsklasse er at administrere brugerdata. En del af det kan involvere at tale med en database, men det betyder ikke, at brugeradministrationsklassen er en database. Hvis User extends Database , det betyder, at den kan alt hvad Database er klasse kan (og mere). Det betyder, at du kan bruge User klasse overalt i stedet for Database klasse, og det giver ingen mening. Hold ansvar adskilt.

Nu kan det stadig diskuteres, om det er den rigtige struktur eller ej, men det går i den rigtige retning. Men du vil måske virkelig have en User klasse, som repræsenterer én bruger . Du har så en UserManager eller UserORM eller UserStorage eller hvad som helst, der handler om at hente og gemme User objekter i en database. Denne klasse bruger igen en Database at gøre netop det. Det holder ansvar klart og adskilt. User klasse repræsenterer brugerdata, Database klasse interagerer med databasen, UserORM/Manager/whatever i midten forhandler mellem de to.



  1. SQL fejl Jeg kan ikke finde ud af dette

  2. Påkrævet enkelt forespørgsel for at hente data fra tabeller

  3. Indsatte, slettede tabeller (magiske tabeller) i MySQL

  4. Sådan vælger du data fra en nøgleværdipartabel