LINUX.ORG.RU

История изменений

Исправление Razip, (текущая версия) :

В общем идея разделения модели и ресурсов хорошо прижилась.

Класс-ресурс теперь может загружать в модель данные, дабы не делать этого в контроллере. Для этого достаточно передать модель через сеттер (по ссылке) в объект ресурса.

Теперь SessionStorage включен в ресурс UserResource (тот, который принадлежит модели UserModel), т.к. это такой же равноправный интерфейс для работы с данными как и PDO.

$user = (new UserModel())->setName($_POST['name'])->setPassword($_POST['password']);

$userResource = (new UserResource())->useModel($user);

if (!$userResource->findByNameAndPassword()) {
    throw new Exception('имя и/или пароль указаны не верно');
}

if (!$user->isConfirmed()) {
    throw new Exception('пользователь не был подтвержден');
}

$user->setLoginFlag(true);

$userResource->saveinSession();
Если раньше ресурс передавался через конструктор контроллера (из-за зависимостей), то теперь можно просто создавать новый экземпляр класса-ресурса прямо в нем! Как это удается? Вот так:
// где-то в точке входа программы
UserResource::setPDO($PDO);
UserResource::setSessionStorage(new FileSession());
Я сделал статические методы-сеттеры для зависимостей, хранящихся в статических свойствах. В конструкторе проверяется удовлетворение зависимостей. Дабы не делать такого:
/**
 * @param UserModel $currentUser
 * @param UserResource $userResource
 * @param CategoryResource $categoryResource
 */
function __construct(UserModel &$currentUser, UserResource &$userResource, CategoryResource &$categoryResource) {
    $this->currentUser = $currentUser;
    $this->userResource = $userResource;
    $this->categoryResource = $categoryResource;
}
И ведь это еще мало ресурсов используется! По логике контроллера там нужно штук 5 таких ресурсов.

Исправление Razip, :

В общем идея разделения модели и ресурсов хорошо прижилась.

Класс-ресурс теперь может загружать в модель данные, дабы не делать этого в контроллере. Для этого достаточно передать модель через сеттер (по ссылке) в объект ресурса.

Теперь SessionStorage включен в ресурс UserResource (тот, который принадлежит модели UserModel), т.к. это такой же равноправный интерфейс для работы с данными как и PDO.

            $user = (new UserModel())->setName($_POST['name'])->setPassword($_POST['password']);

            $userResource = (new UserResource())->useModel($user);

            if (!$userResource->findByNameAndPassword()) {
                throw new Exception('имя и/или пароль указаны не верно');
            }

            if (!$user->isConfirmed()) {
                throw new Exception('пользователь не был подтвержден');
            }

            $user->setLoginFlag(true);

            $userResource->saveinSession();
Если раньше ресурс передавался через конструктор контроллера (из-за зависимостей), то теперь можно просто создавать новый экземпляр класса-ресурса прямо в нем! Как это удается? Вот так:
// где-то в точке входа программы
UserResource::setPDO($PDO);
UserResource::setSessionStorage(new FileSession());
Я сделал статические методы-сеттеры для зависимостей, хранящихся в статических свойствах. В конструкторе проверяется удовлетворение зависимостей. Дабы не делать такого:
    /**
     * @param UserModel $currentUser
     * @param UserResource $userResource
     * @param CategoryResource $categoryResource
     */
    function __construct(UserModel &$currentUser, UserResource &$userResource, CategoryResource &$categoryResource) {
        $this->currentUser = $currentUser;
        $this->userResource = $userResource;
        $this->categoryResource = $categoryResource;
    }
И ведь это еще мало ресурсов используется! По логике контроллера там нужно штук 5 таких ресурсов.

Исходная версия Razip, :

В общем идея разделения модели и ресурсов хорошо прижилась.

Класс-ресурс теперь может загружать в модель данные, дабы не делать этого в контроллере. Для этого достаточно передать модель через сеттер (по ссылке) в объект ресурса.

Теперь SessionStorage включен в ресурс UserResource (тот, который принадлежит модели UserModel), т.к. это такой же равноправный интерфейс для работы с данными как и PDO.

            $user = (new UserModel())->setName($_POST['name'])->setPassword($_POST['password']);

            $userResource = (new UserResource())->useModel($user);

            if (!$userResource->findByNameAndPassword()) {
                throw new Exception('имя и/или пароль указаны не верно');
            }

            if (!$user->isConfirmed()) {
                throw new Exception('пользователь не был подтвержден');
            }

            $user->setLoginFlag(true);

            $userResource->saveinSession();
Если раньше ресурс передавался через конструктор контроллера (из-за зависимостей), то теперь можно просто создавать новый экземпляр класса. Как это удается? Вот так:
// где-то в точке входа программы
UserResource::setPDO($PDO);
UserResource::setSessionStorage(new FileSession());
Я сделал статические методы-сеттеры для зависимостей, хранящихся в статических свойствах. В конструкторе проверяется удовлетворение зависимостей. Дабы не делать такого:
    /**
     * @param UserModel $currentUser
     * @param UserResource $userResource
     * @param CategoryResource $categoryResource
     */
    function __construct(UserModel &$currentUser, UserResource &$userResource, CategoryResource &$categoryResource) {
        $this->currentUser = $currentUser;
        $this->userResource = $userResource;
        $this->categoryResource = $categoryResource;
    }
И ведь это еще мало ресурсов используется! По логике контроллера там нужно штук 5 таких ресурсов.