Jak bych měl nastavit své třídy?

hlasů
0

Začínám pracovat s OOP vytvořit stránky uživatelských dat generovaných.

Existují různé typy dat přicházejících ze svých tříd. Mám funkce, které se vám na základě údajů z databáze a funkce, které stačí vybrat jednu položku z těchto seznamů. Například

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

A teď, jak mám nastavit své třídy uspořádat tyto funkce. Měl jsem jen dát je všechny ve stejné třídě, nebo bych měl oddělit komentáře z těchto předmětů, nebo třeba oddělit funkce, které načítají jediný článek / komentář od těch, které načíst seznam článků / komentáře. Mohl bych přidat další věci na místě pozdějšího, které umožňují podat připomínky takže jsem měl na mysli právě oddělující všechny komentáře funkce od ostatních. Také, „místní“ funkce všichni používají stejnou funkci, která provádí matematiku, takže bych skupina těch, společně, nebo možná jen pomocí dědičnosti ... jakýkoli náznak ???

Zatímco na téma OOP, mám uživatelské třídu, která vypadá jako ... soukromý uživatel $ = 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 
}

Nyní má někdo neviděl s tím, jak to vypadá, špatně hlavně bych nastavit user_data jako parametr pro funkci add_user namísto vkládání proměnné členů?

Položena 27/08/2009 v 03:52
zdroj uživatelem
V jiných jazycích...                            


1 odpovědí

hlasů
6

V prvé řadě je třeba si uvědomit, že při své staré funkce procedurální styl a balení je uvnitř objektů nedělá váš kód objektově orientovaný, to prostě znamená, že píšete složitější a hrozně ošklivé procedurální kód.

Za druhé bych důrazně doporučujeme, ve skutečnosti nemohu být příliš namáhavé ve svých doporučeních, které jste nějakou dobu trvat alespoň studovat různé PHP rámců, které jsou tam. I když jste možná nikdy použít některý z nich, cítím při zajišťování, že studium některé z nich vám dá lepší pochopení na objektově orientované principy a dobrého designu aplikací obecně docela bezpečné. V případě, že jste nikdy neviděl předtím, následující by měla poskytnout místo pro start:

  • Framework Zend
  • Symfony
  • CakePHP
  • Solar Framework

Navíc, pokud jste nikdy neslyšeli o Martin Fowler nebo vzory Enterprise Application Architecture, tak bych důrazně doporučujeme vyzkoušet a vyzvednout kopii. Doslova napsal knihu, která poskytuje základní vzory, které jsou používány v každém populární webové rámce.

Tolik pro můj ‚přečíst manuál odpověď‘ :-P

Ve vašem konkrétním případě bych začít se základní Active Record vzoru obsahovat vaše přístupové logiky databáze a svou logiku domény. V tomto typu modelu, každá tabulka databáze (uživatelé, články, komentáře) je zastoupena diskrétní objektu. Základní aktivní třída Record pro uživatele by obsahovat všechny funkce, aby si konkrétní uživatele nebo seznamu uživatelů, stejně jako funkce vložit, aktualizovat nebo odstranit uživatele. Kromě toho má uživatel Active třída Záznam by měl obsahovat metody k načtení články a komentáře uživatele.

Třída shell Uživatel může vypadat nějak takto:

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() {}
}
Odpovězeno 27/08/2009 v 04:26
zdroj uživatelem

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