Mysql
 sql >> Datenbank >  >> RDS >> Mysql

Ist die Verlängerung des Unterrichts eine gute Praxis?

Einfache Faustregel:wenn eine Klasse extends wird eine andere, dann ist diese Klasse dieser Elternklasse (nur leicht verändert oder erweitert). Sie können diese untergeordnete Klasse anstelle der übergeordneten Klasse bestehen. Beispiel:

class Foo { }

class Bar extends Foo { }

function baz(Foo $foo) { }

baz(new Bar);

Das funktioniert, baz() erwartet ein Foo akzeptiert aber auch einen Bar , weil Bar ist ein Foo .

Nun, ist Ihre Users eine Database ? Nein. Ihre Benutzer sind keine Datenbank. Ihre Benutzer verwenden eine Datenbank. Wenn überhaupt, sollten Sie composition verwenden :

class User {

    protected $database;

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

}

Eine Klasse sollte sein was seine Verantwortlichkeiten sind . Die Verantwortung einer Benutzerverwaltungsklasse besteht darin, Benutzerdaten zu verwalten. Ein Teil davon kann die Kommunikation mit einer Datenbank beinhalten, aber das bedeutet nicht, dass die Benutzerverwaltungsklasse ist eine Datenbank. Wenn User extends Database , das heißt, es kann alles, was die Database kann Klasse kann (und mehr). Das heißt, Sie könnten den Users verwenden Klasse überall statt die Database Klasse, und das macht keinen Sinn. Halten Sie Verantwortlichkeiten getrennt.

Ob das nun die richtige Struktur ist, darüber lässt sich noch streiten, aber es geht in die richtige Richtung. Aber vielleicht möchten Sie wirklich einen Users haben Klasse, die einen Benutzer darstellt . Sie haben dann einen UserManager oder UserORM oder UserStorage oder was auch immer, das sich mit dem Abrufen und Speichern von User befasst Objekte in einer Datenbank. Diese Klasse wiederum benutzt eine Database genau das zu tun. Das hält die Verantwortlichkeiten klar und getrennt. Der Users Klasse repräsentiert Benutzerdaten, die Database Klasse interagiert mit der Datenbank, dem UserORM/Manager/whatever in der Mitte verhandelt zwischen den beiden.