паттерн command php
реализация
реализация
"; ////////////////////////////////////////////// abstract class Command { abstract function execute( CommandContext $context ); } class LoginCommand extends Command{ function execute( CommandContext $context ){ $user = $context->get('username'); $pass = $context->get('pass'); Loger::write("enter user: ".$user); return true; } } class CommandContext { private $params=array(); private $error=""; function __construct() { $this->params = $_REQUEST; } function addParam($key, $val){ $this->params[$key] = $val; } function get($key){ return $this->params[$key]; } function setError($error){ $this->$error = $error; } function getError(){ return $this->error; } } class CommandNotFoundException extends Exception {} class CommandFactory { private static $dir = "commands"; static function getCommand($action = 'default'){ if (preg_match('/\W/', $action )){ throw new CommandNotFoundExceptioin('Недопустимые символы в комманде'); } $class=$action."Command"; /*//времено //возможен иклюдинг предусмотреть $class = $action.".ph $file = self::$dir.DIRECTORY_SEPARATOR if (!file_exists($file)){ throw new CommandNotFoundExceptioin('не найден файл '.$file); } require_once( $file ); */ if(!class_exists($class)){ throw new CommandNotFoundExceptioin('не найден класс '.$class); } $cmd = new $class(); return $cmd; } } class Controller { private $context; function __construct(){ $this->context = new CommandContext(); } function getContext(){ return $this->context; } function process(){ //var_dump( $this->context->get('action') ); $cmd = CommandFactory::getCommand( $this->context->get('action') ); if ( !$cmd->execute($this->context) ){ //обработка ошибок }else{ //все прошло успешно //Теперь отобразим результаты } } } $controler = new Controller(); //эмулируем действия пользователя $context = $controler->getContext(); $context->addParam('action', 'Login'); $context->addParam('username', 'jo'); $context->addParam('pass', '1'); $controler->process(); ?>
Комментариев нет:
Отправить комментарий