Nicki
Новичок
ООП. Разделение логики объектов
Я поискал по форуму, но ответа не нашел, хотя не исключено что он уже есть. Очень прошу помочь мне разобраться ссо следующей "задачей". Наверное вопрос из разряда ламерских, но все же. Я приведу пример из своей реализации. Это класс модуля Юзеры. Модуль производит управление профаилами зарегистрированных на сайте юзеров.
Вот насколько правильная/неправильная такая реализация модулей, подскажите пожалуйста. Может ктото чтото подобное использует? К примеру у меня возникают какие то сомнения, например, в том что это вообще правильный "объект", т.к. он больше смахивает все таки на библиотеку функций (для работы с записями юзеров в БД - для чего и нужен модуль)...
Я поискал по форуму, но ответа не нашел, хотя не исключено что он уже есть. Очень прошу помочь мне разобраться ссо следующей "задачей". Наверное вопрос из разряда ламерских, но все же. Я приведу пример из своей реализации. Это класс модуля Юзеры. Модуль производит управление профаилами зарегистрированных на сайте юзеров.
PHP:
abstract class Module
{
protected $Dao = null; // ссылка на объект
protected $User = null; // ссылка на объект
protected $Templator = null; // ссылка на объект
protected $Request = null; // ссылка на объект
protected $moduleId = 0; // идентификатор модуля в таблице core_modules
protected $moduleName = ''; // кодовое имя модуля
protected $errors = array(); // массив с сообщениями об ошибках
public function __construct()
{
$this->Dao = Core::getDao();
$this->User = Core::getUser();
$this->Templator = Core::getTemplator();
$this->Request = Core::getRequest();
}
public function isErrors() { return (0 != sizeof($this->errors)? true:false); }
public function getErrors() { return $this->errors; }
/**
* Проверяет, возможность выполнить команду модуля текущим юзером
* @param string $commandName Имя команды модуля
* @return bool
**/
public function isHaveAccess($commandName)
{
return $this->User->isHaveAccess($this->moduleName, $commandName);
}
/**
* Метод выполнения команд модуля
* @param string $commandName Имя команды модуля
**/
public abstract function executeCommand($commandName);
}
class Users extends Module
{
protected $moduleName = 'users'; // внутреннее имя модуля
public function __construct()
{
// вызов общего конструктора
parent::__construct();
}
function executeCommand($commandName)
{
// если юзер не имеет права на выполнение команды модуля
if (! $this->isHaveAccess($commandName)) header('Location: index.php');
// выполнить команду
switch ($commandName)
{
// регистрация нового юзера
case 'reguser': include_once 'commands/reguser.cmd.php'; break;
// послать письмо подтверждения регистрации
case 'sendact': include_once 'commands/sendact.cmd.php'; break;
// другие команды модуля
....
}
}
/**
* возвращает данные юзера
* @param Int $userId - ID юзера
* @return Array
**/
function getUserData($userId) {}
/**
* возвращает массив с данными юзеров удовлетворяющих условиям отбора
* @param Array $conditions - массив с критериями отбора
* @return Array
**/
function getUsersData($conditions) {}
/**
* добавляет данные юзера в БД
* @param Array $userData - массив с данными регистрируемого юзера
* @return Int - идентификатор добавленного в БД юзера
**/
function insertUser($userData) {}
/**
* посылает юзеру письмо с ссылкой для подтверждения регистрации
* @param String $email - имаил юзера
* @return bool
**/
function sendConfirmRegistration($email) {}
/**
* активирует профаил юзера подтверждая его регистрацию.
* @param Array $profileData - данные необходимые для активации профаила
**/
function activateProfile($profileData) {}
/**
* удаляет юзера из БД
**/
function deleteUser($userId) {}
}