2009-08-27 2 views
0

Я начинаю работать с oop для создания сайта сгенерированных пользователем данных.Как мне настроить свои классы?

Существуют разные типы данных, поступающие из моих классов. У меня есть функции, которые получают список данных из базы данных и функции, чтобы просто выбрать один элемент из этих списков. Например

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 

Теперь, как я должен настроить свои классы для организации этих функций. Должен ли я просто поместить их все в один класс или я должен отделить комментарии от статей или, возможно, отделить функции, которые извлекают одну статью/комментарий из тех, которые извлекают список статей/комментариев. Я мог бы добавить еще кое-что на сайт позже, чтобы разрешить комментарии, поэтому я думал просто отделить все функции комментариев от других. Кроме того, «локальные» функции используют одну и ту же функцию, которая выполняет математику, поэтому я должен группировать их вместе или просто использовать наследование ... любое предложение ???

У меня есть класс пользователя, который выглядит как ... 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 
} 

Теперь кто-нибудь видит ничего плохого с тем, как это выглядит, по большей части, я должен установить user_data в качестве параметра для функции add_user, вместо того, чтобы вставить переменные-члены?

ответ

6

Прежде всего вам нужно понять, что использование ваших старых функций процедурного стиля и их обертывание внутри объектов не делает ваш код объектно-ориентированным, это просто означает, что вы пишете более сложный и ужасно уродливый процедурный код.

Во-вторых, я бы настоятельно рекомендовал, по сути, я не могу быть слишком напряженным в своих рекомендациях, что вы потратите некоторое время, чтобы хотя бы изучить различные PHP-структуры, которые есть там. Хотя вы никогда не сможете использовать ни один из них, я чувствую себя довольно уверенно, гарантируя, что изучение любого из них даст вам лучшее представление об объектно-ориентированных принципах и хорошем дизайне приложений в целом. В случае, если вы никогда не видели ни прежде, следующие должны дать место для начала:

  • Zend Framework
  • Symfony
  • CakePHP
  • Solar Framework

Кроме того, если вы «Никогда не слышал о Мартине Фаулере или шаблонах архитектуры корпоративных приложений, я настоятельно рекомендую вам попробовать и получить копию. Он буквально написал книгу, в которой представлены основные шаблоны, которые используются в КАЖДОЙ популярной веб-среде.

Так много для моего «читать ручной ответ» :-P

В вашем конкретном случае я хотел бы начать с основным активным шаблоном записи, чтобы содержать логику доступа к базе данных и логику домена. В этом типе шаблона каждая таблица базы данных (пользователи, статьи, комментарии) представлена ​​дискретным объектом. Основной класс Active Record для пользователей будет содержать все функции для получения определенного пользователя или списка пользователей, а также функции для вставки, обновления или удаления пользователя. Кроме того, класс User Active Record будет содержать методы загрузки статей и комментариев пользователя.

Оболочка класса Пользователь может выглядеть примерно так:

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() {} 
}