2 Stimmen

Sollte ich diese Klasse erweitern? (PHP)

Ich erstelle gerade ein ORM in PHP, und ich habe eine Klasse 'ORM', die im Grunde ein Objekt erstellt, das einer Datenbanktabelle entspricht (ich strebe ähnliche Funktionen wie bei einem ActiveRecord-Muster an.) ORM selbst erweitert 'Database', die die Datenbankverbindung einrichtet.

Also kann ich aufrufen:

$c = new Customer();
$c->name = 'John Smith';
$c->save();

Die ORM-Klasse bietet diese Funktionalität (richtet die Klasseneigenschaften ein, bietet save(), find(), findAll() etc. Methoden) und Customer erweitert ORM. Möglicherweise möchte ich jedoch in Zukunft zusätzliche öffentliche Methoden zu Customer (oder einem anderen Modell, das ich erstelle) hinzufügen. Sollte diese also ORM erweitern oder nicht?

Ich weiß, dass ich hier nicht viele Informationen bereitgestellt habe, aber hoffentlich ist dies anhand einer vagen Erklärung verständlich, anstatt 300+ Codezeilen aufzulisten.

0voto

Russell Myers Punkte 2009

Angesichts meines begrenzten Wissens über PHP bin ich mir nicht sicher, ob dies damit zusammenhängt, aber wenn Sie versuchen, viele Geschäftsobjekte zu erstellen, könnte dies ein unglaublich zeitaufwändiger Prozess sein. Vielleicht sollten Sie Frameworks wie CakePHP und ähnliche in Betracht ziehen. Das ist hilfreich, wenn Sie noch dabei sind, Ihre Geschäftslogik zu erstellen.

0voto

SchizoDuckie Punkte 9293

Ich habe es so gelöst in meinem Pork.dbObject. Schau es dir an und schnapp dir etwas von dem Gehirnschmalz, den ich schon gemacht habe :P

class Poll extends dbObject // dbObject ist mein ORM. Poll kann es erweitern, damit es alle Eigenschaften erhält.
{
        function __construct($ID=false)
        {
            $this->__setupDatabase('polls', // db Tabelle
                array('ID_Poll' => 'ID',    // db Feld => Objekt Eigenschaft
                        'strPollQuestion' => 'strpollquestion', 
                        'datPublished' => 'datpublished', 
                        'datCloseDate' => 'datclosedate', 
                        'enmClosed' => 'enmclosed', 
                        'enmGoedgekeurd' => 'enmgoedgekeurd'),
                        'ID_Poll',  // primärer db Schlüssel 
                        $ID);   // primärer Schlüssel Wert
        $this->addRelation('Pollitem'); //Verknüpfung von PollItem mit Poll 1:1
        $this->addRelation('Pollvote', 'PollUser'); // Verknüpfen von PollVote über PollUser (viele:viele)

        }

function Display()
{

 // Zeige deine Umfrage hier an:
    $pollItems = $this->Find("PollItem"); // finde alle Umfragepunkte
    $alreadyvoted = $this->Find("PollVote", array("IP"=>$_SERVER['REMOTE_ADDR'])); // finde alle Stimmen für aktuelle IP
}

Beachte, dass auf diese Weise jegliche Datenbank- oder ORM-Funktionalität vom Poll-Objekt abstrahiert wird. Es muss es nicht wissen. Nur das setupDatabase zum Verbinden der Felder/ Zuordnungen und das addRelation zum Verknüpfen der Beziehungen zu anderen dbObjects.

Außerdem weiß selbst die dbObject-Klasse nicht viel über SQL. Select/Join-Abfragen werden von einem speziellen QueryBuilder-Objekt erstellt.

0voto

Bob Somers Punkte 7216

Sie sind definitiv auf dem richtigen Weg mit Vererbung hier.

Wenn Sie ein ORM nur zum Spaß bauen (oder weil Sie nicht mögen, wie andere Dinge handhaben), dann machen Sie weiter, ansonsten sollten Sie sich vielleicht ein vorgefertigtes ORM ansehen, das den Großteil Ihres Codes direkt aus Ihrem Datenbankschema generieren kann. Es wird Ihnen eine Menge Zeit sparen. CoughPHP ist derzeit mein Favorit.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X