Как мне настроить мои занятия? - PullRequest
0 голосов
/ 27 августа 2009

Я начинаю работать с 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

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

Что касается oop, у меня есть пользовательский класс, который выглядит как ... личное $ 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 вместо вставки переменных-членов?

1 Ответ

6 голосов
/ 27 августа 2009

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

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

  • Zend Framework
  • Symfony
  • CakePHP
  • Солнечные рамки

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

Вот вам и мой «читай ответ»: -P

В вашем конкретном случае я бы начал с базового шаблона Active Record, который содержал бы логику доступа к вашей базе данных и логику вашего домена. В этом типе шаблона каждая таблица базы данных (пользователи, статьи, комментарии) представлена ​​отдельным объектом. Базовый класс 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() {}
}
...