sql >> Database >  >> RDS >> Mysql

Is het verlengen van lessen een goede gewoonte?

Eenvoudige vuistregel:als een klasse extends een andere, dan is die klasse is die ouderklasse (slechts licht gewijzigd of uitgebreid). U kunt deze kindklasse doorgeven in plaats van de bovenliggende klasse. Voorbeeld:

class Foo { }

class Bar extends Foo { }

function baz(Foo $foo) { }

baz(new Bar);

Dit werkt, baz() verwacht een Foo maar accepteert ook een Bar , omdat Bar is een Foo .

Nu, is uw Users een Database ? Nee. Uw gebruikers zijn geen database. Uw gebruikers gebruiken een databank. Als u dat al doet, moet u compositie . gebruiken :

class User {

    protected $database;

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

}

Een klas moet zijn wat zijn verantwoordelijkheden zijn . De verantwoordelijkheid van een gebruikersbeheerklasse is het beheren van gebruikersgegevens. Een deel daarvan kan het praten met een database inhouden, maar dat betekent niet dat de gebruikersbeheerklasse is een databank. Als User extends Database , dat betekent dat het alles kan doen wat de Database klas kan doen (en meer). Dat betekent dat u de User . kunt gebruiken klasse overal in plaats van de Database klasse, en dat slaat nergens op. Houd verantwoordelijkheden gescheiden.

Nu is het nog de vraag of dat de juiste structuur is of niet, maar het gaat de goede kant op. Maar misschien wilt u echt een User class, wat staat voor één gebruiker . Je hebt dan een UserManager of UserORM of UserStorage of wat dan ook, dat te maken heeft met het ophalen en opslaan van User objecten in een database. Deze klasse gebruikt op zijn beurt een Database om dat te doen. Dat houdt verantwoordelijkheden helder en gescheiden. De User klasse staat voor gebruikersgegevens, de Database class interageert met de database, de UserORM/Manager/whatever in het midden onderhandelt tussen de twee.



  1. Hoe de statusbalkkleur in SSMS in te stellen voor verschillende SQL Server-instanties - SQL Server / TSQL-zelfstudie, deel 6

  2. Hoe RUNAS /NETONLY-functionaliteit in te bouwen in een (C#/.NET/WinForms) programma?

  3. sql geografie naar dbgeography?

  4. Waarom worden Unicode-tekens correct weergegeven in de database, maar als ? wanneer afgedrukt in Java via Hibernate?