За последние 24 часа нас посетил 11641 программист и 1265 роботов. Сейчас ищут 418 программистов ...

работа с бд из PageController или Command

Тема в разделе "Прочие вопросы по PHP", создана пользователем mahmuzar, 22 сен 2015.

  1. mahmuzar

    mahmuzar Старожил

    С нами с:
    6 апр 2012
    Сообщения:
    4.633
    Симпатии:
    425
    Адрес:
    РД, г. Махачкала.
    Application Controller
    Код (PHP):
    1. class Controller {
    2.  
    3.     private function __construct() {
    4.         
    5.     }
    6.  
    7.     static function run() {
    8.         $pageController = new \mahmuzar\controller\p_controller\PageController();
    9.         $pageController->run();
    10.     }
    11.  
    12. }
    PageController
    Код (PHP):
    1. class PageController {
    2.     //
    3.  
    4.     /**
    5.      * создается объект контроллера  страницы если класс контроллера определен
    6.      * иначе выполнение продолжается в  PageController
    7.      */
    8.     function run() {
    9.         $pageController = $this->getPageControllerObject();
    10.         $pageController->execute();
    11.     }
    12.  
    13.     public function execute() {
    14.         $cmd_r = new \mahmuzar\command\CommandResolver();
    15.         $this->cmd = $cmd_r->getCommand($this->request);
    16.         $this->cmd->auth = $this->check();
    17.         $this->cmd->execute($this->request);
    18.     }
    19.  
    20.     /**
    21.      * 
    22.      * @return boolean Вернет объект типа PageController если нету такого 
    23.      * будет возвращено $this
    24.      */
    25.     public function getPageControllerObject() {
    26.         $this->cmd = $this->request->getProperty('cmd');
    27.         if (!empty($this->cmd)) {
    28.             $className = DIRECTORY_SEPARATOR . __NAMESPACE__ . DIRECTORY_SEPARATOR . $this->cmd . "Controller";
    29.             $fileName = __NAMESPACE__ . DIRECTORY_SEPARATOR . $this->cmd . "Controller.php";
    30.             if (file_exists($fileName)) {
    31.                 require_once $fileName;
    32.                 $cmdClass = new \ReflectionClass($className);
    33.                 if ($cmdClass->isSubclassOf(self::class)) {
    34.                     return $cmdClass->newInstance($className);
    35.                 } else {
    36.                     throw new \mahmuzar\base\AppException('Объект класса не является типа PageController');
    37.                 }
    38.             } else {
    39.                 return $this;
    40.             }
    41.         } else {
    42.             return $this;
    43.         }
    44.     }
    45.  
    46.  
    47. }
    NewsController
    Код (PHP):
    1. class NewsController extends PageController {
    2.  
    3.     public function execute() {
    4.  
    5.         $cmd_r = new \mahmuzar\command\CommandResolver();
    6.         $this->cmd = $cmd_r->getCommand($this->request);
    7.         $this->cmd->auth = $this->check();
    8.         $this->cmd->execute($this->request);
    9.     }
    10.  
    11. }
    NewsCommand
    Код (PHP):
    1. class NewsCommand extends Command {
    2.     private $newsManager; //объект типа NewsManager;
    3.     /*
    4.      * 
    5.      */
    6.  
    7.     private function get() {
    8.         
    9.     }
    10.  
    11.     private function set() {
    12.         
    13.     }
    14.  
    15.     private function delete() {
    16.         
    17.     }
    18.  
    19. }
    Так вот, вопрос в чем. Запутался правильнее работать с бд из Command или же из контроллера страницы?
    Я сам работал до сих пор из Command
     
  2. d1gi

    d1gi Активный пользователь

    С нами с:
    24 май 2009
    Сообщения:
    326
    Симпатии:
    0
    Command - зто CLI?
     
  3. mahmuzar

    mahmuzar Старожил

    С нами с:
    6 апр 2012
    Сообщения:
    4.633
    Симпатии:
    425
    Адрес:
    РД, г. Махачкала.
    d1gi, да нет. Ну еще называется Action
     
  4. romach

    romach Старожил

    С нами с:
    26 окт 2013
    Сообщения:
    2.904
    Симпатии:
    719
    О какой методологии идет речь? Потому как оба варианта могут быть верными )

    p.s. Команда - это немного не то. Команда просто берет и выполняет одно конкретное действие.
     
  5. p@R@dox 55RU

    p@R@dox 55RU Зэк
    [ БАН ]

    С нами с:
    21 май 2014
    Сообщения:
    1.358
    Симпатии:
    7
    Адрес:
    с планеты Ялмез
  6. mahmuzar

    mahmuzar Старожил

    С нами с:
    6 апр 2012
    Сообщения:
    4.633
    Симпатии:
    425
    Адрес:
    РД, г. Махачкала.
    когда пользователь попадает на страницу новостей, новости из бд я вытягиваю в комманд, похоже, делать это надо в контроллере страницы. Нагрузил команд работой.
    Не совсем правильно выразился. Command не есть Action. Ссылку подобную я смотрел только symfony2, можно сказать одно и то же.
     
  7. d1gi

    d1gi Активный пользователь

    С нами с:
    24 май 2009
    Сообщения:
    326
    Симпатии:
    0
  8. romach

    romach Старожил

    С нами с:
    26 окт 2013
    Сообщения:
    2.904
    Симпатии:
    719
    Предположу, что под командой здесь понимается паттерн.
    Ну, в любом случае ты это будешь делать, вопрос только как ) Контроллер может обращаться напрямую к моделям, а в случае если логика сложна, над моделями вводят ещё один слой репозиториев, который будет разруливать сложные выборки или операции с данными. Все это можно вынести в сервисный слой, который прячет внутрь себя всю логику и предоставляет удобный интерфейс для работы с сущностями.

    Команды же это несколько из иной области, ближе к CQRS. Идея команд в том, что они выполняют действие, к примеру создаешь какой-нибудь CreateUserCommand и передаешь ему входящие данные, а он уже проведет все необходимые операции по созданию пользователя.

    По началу пугает, что тебе приходится на каждый чих создавать по классу, но в итоге это окупается, т.к. в таком коде гораздо проще разобраться, чем в методах на 300 строк, как тут предлагали некоторые ) Ты видишь класс, уже по названию понимаешь что он делает и при этом логика не размыта по куче мест.

    Ну и самое главное, не менять подход в ходе разработки. Весь проект должен быть построен по одному принципу )
     
  9. mahmuzar

    mahmuzar Старожил

    С нами с:
    6 апр 2012
    Сообщения:
    4.633
    Симпатии:
    425
    Адрес:
    РД, г. Махачкала.
    romach, спасибо. Весьма доходчиво объяснил)

    Всем спасибо за участие.
     
  10. rodent90

    rodent90 Новичок

    С нами с:
    26 мар 2015
    Сообщения:
    533
    Симпатии:
    37
    По мне лучше просто расширить класс mysqli.