2009-08-27 6 views
0

Ich fange an, mit oop zu arbeiten, um eine Seite der Benutzer erzeugten Daten zu errichten.Wie sollte ich meinen Unterricht einrichten?

Es gibt verschiedene Arten von Daten aus meinen Klassen. Ich habe Funktionen, die eine Liste von Daten aus der Datenbank abrufen, und Funktionen, um nur ein Element aus diesen Listen auszuwählen. Zum Beispiel

function Get_Article($aid); //Gets an article 
function Get_Users_Articles($uid); //Gets a multidemsional array of the users 
            //articles 
function Get_Latest_Articles(); //Self explanatory by now 
function Get_Local_Articles($zip); //Gets articles written by local users 
function Get_Local_Users($zip); //Gets all local users 

function Get_All_Article_Comments($aid); //Gets a multidimensional array of the 
            //comments written for an article 
function Get_Article_Comment($cid); //Gets a single article comment 

Nun, wie soll ich meine Klassen einrichten, um diese Funktionen zu organisieren. Sollte ich sie alle in der gleichen Klasse, oder sollte ich die Kommentare von den Artikeln trennen, oder vielleicht trennen Sie die Funktionen, die einen einzelnen Artikel/Kommentar von denen abrufen, die eine Liste von Artikeln/Kommentare abrufen. Ich könnte später noch weitere Dinge zur Seite hinzufügen, die Kommentare zulassen, also dachte ich darüber nach, einfach alle Kommentarfunktionen von den anderen zu trennen. Außerdem verwenden die "lokalen" Funktionen alle dieselbe Funktion, die die Mathematik ausführt, also sollte ich diese zusammen gruppieren oder vielleicht nur die Vererbung verwenden ... irgendeinen Vorschlag ???

Während ich zum Thema oop, habe ich eine Benutzerklasse, die aussieht wie ... private $ user = array();

public function Get_User_Data($uid){ 
    //get user data from database 
    return $this->user; 
} 

public function Set_User_Data($user_array){ 
    $this->user = $user_array; 
} 

public function Add_User(){ 
    //INSERT data from $this->user into the database 
} 

Jetzt niemand etwas falsch mit der Art, wie diese aussieht, vor allem, soll ich die user_data als Parameter für die add_user Funktion eingestellt, stattdessen die Elementvariablen des Einsetzens?

Antwort

6

Als erstes müssen Sie verstehen, dass die Verwendung Ihrer alten prozeduralen Stilfunktionen und deren Umhüllung innerhalb von Objekten Ihren Code nicht objektorientiert macht, sondern lediglich bedeutet, dass Sie komplizierteren und schrecklich hässlichen Verfahrenscode schreiben.

Zweitens würde ich dringend empfehlen, in der Tat kann ich nicht zu anstrengend in meinen Empfehlungen sein, dass Sie sich etwas Zeit nehmen, um zumindest die verschiedenen PHP Frameworks zu studieren, die da draußen sind. Auch wenn Sie keines davon verwenden, ist es ziemlich sicher, wenn Sie sicherstellen, dass Sie durch das Studium eines objektorientierten Prinzips und eines guten Anwendungsdesigns besser verstehen können. Für den Fall, haben Sie nie zuvor gesehen, sollte die folgenden einen Platz geben zu starten:

  • Zend Framework
  • Symfony
  • CakePHP
  • Sonnenrahmen

Außerdem, wenn Sie Ich habe noch nie von Martin Fowler oder Patterns von Enterprise Application Architecture gehört, ich würde Ihnen wärmstens empfehlen, dass Sie versuchen, eine Kopie abzuholen. Er hat buchstäblich das Buch geschrieben, das die grundlegenden Muster liefert, die in JEDEM beliebten Web-Framework verwendet werden.

So viel zu meinem ‚lesen Sie die manuelle Antwort‘ :-P

In Ihrem speziellen Fall, dass ich mit einem grundlegenden Active Record starten würde Ihre Datenbank-Zugriffslogik und Ihre Domain-Logik enthalten. Bei dieser Art von Muster wird jede Datenbanktabelle (Benutzer, Artikel, Kommentare) durch ein diskretes Objekt dargestellt. Die grundlegende Active Record-Klasse für Benutzer enthält alle Funktionen zum Abrufen eines bestimmten Benutzers oder einer Liste von Benutzern sowie die Funktionen zum Einfügen, Aktualisieren oder Löschen eines Benutzers. Darüber hinaus enthält eine Klasse für den aktiven Benutzerdatensatz Methoden zum Laden der Artikel und Kommentare eines Benutzers.

könnten Eine Shell User-Klasse wie folgt aussehen:

class User extends Active_Record { 

public function find() {} 

/** 
    Single function performs inserts and updates for the object 
**/ 
public function save() {} 

public function delete() {} 

public function getArticles() {} 

public function getComments() {} 
} 
Verwandte Themen