Cum ar trebui să înființeze clasele mele?

voturi
0

Încep să lucreze cu oop pentru a construi un site de date generate de utilizatori.

Există diferite tipuri de date provenind din clasele mele. Am funcții care obține o listă de date din baza de date și funcții pentru a selecta doar un singur articol din aceste liste. De exemplu

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

Acum, cum ar trebui să înființeze clase mele de a organiza aceste funcții. Ar trebui doar să le pun în aceeași clasă, sau ar trebui să separa comentariile de la articole, sau poate separa funcțiile pe care un singur articol prelua / comentariu de la cele care extrage o listă de articole / comentarii. S-ar putea adăuga mai multe lucruri la site-ul mai târziu, care să permită pentru comentarii, asa ca m-am gândit de separându doar toate funcțiile comentariu de celelalte. De asemenea, funcțiile „locale“, toate folosesc aceeași funcție care efectuează calculul, așa că ar trebui să grupa I cei împreună, sau poate folosi doar moștenire ... orice sugestie ???

În timp ce pe tema OOP, am o clasă de utilizator care arata ca ... utilizator $ privat = 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 IGNORE  data from $this->user into the database 
}

Acum, nimeni nu vede nimic în neregulă cu modul în care acest lucru arata, mai ales, ar trebui să setați user_data ca parametru pentru funcția add_user, în loc de a insera variabilelor membre?

Întrebat 27/08/2009 la 03:52
sursa de către utilizator
În alte limbi...                            


1 răspunsuri

voturi
6

Mai întâi de toate, trebuie să înțelegem foarte bine că vechile funcții de stil procedural și învelirea lor în interiorul obiectelor nu face codul orientat pe obiect, aceasta înseamnă doar că scrii cod de procedură mai complicat și oribil urât.

În al doilea rând aș recomanda cu tărie, de fapt, eu nu pot fi prea obositoare în recomandările mele pe care le ia ceva timp pentru a studia cel puțin diferitele cadre PHP care sunt acolo. În timp ce nu se poate folosi oricare dintre ele, mă simt destul de sigur care garantează faptul că studierea oricare dintre ele vă va oferi o mai bună înțelegere pe principii orientate pe obiecte și bun design de aplicare, în general. În cazul în care ai mai văzut niciodată înainte, următoarele ar trebui să dea un loc pentru a începe:

  • Zend Framework
  • Symfony
  • CakePHP
  • Cadrul solar

În plus, dacă n-ai auzit de Martin Fowler sau modele de Enterprise Application Arhitectura, aș recomanda cu tărie să încercați și ridica o copie. El a scris literalmente cartea care a furnizat modelele de bază care sunt utilizate în fiecare cadru de web populare.

Atât de mult pentru meu „citește răspunsul manual“ :-P

În cazul în care dvs. special, aș începe cu un model de bază active record pentru a conține logica de acces a bazei de date și logica de domeniu. În acest tip de model, fiecare tabel de baze de date (utilizatori, articole, comentarii) este reprezentat de un obiect discret. Clasa de bază active record pentru utilizatorii ar conține toate funcțiile pentru a obține un anumit utilizator sau o listă de utilizatori, precum și funcțiile de a insera, actualiza sau șterge un utilizator. În plus, un utilizator activ de clasă înregistrare ar conține metode pentru a încărca articole și comentariile unui utilizator.

O clasă interpretor ar putea arata ceva de genul:

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() {}
}
Publicat 27/08/2009 la 04:26
sursa de către utilizator

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more