Управление объектами в нескольких контекстах - PullRequest
0 голосов
/ 16 января 2012

Вопрос:

Есть ли предпочтительный шаблон проектирования для обработки объекта в разных контекстах? Например: если мне нужно ПОЛУЧИТЬ пользователя из базы данных, то этому объекту необходимо , чтобы иметь идентификатор и уровень привилегий. Однако, если я хочу создать НОВОГО пользователя для регистрации, тогда ему не нужен идентификатор, так как он будет добавлен в базу данных через auto_increment. Пользователю GUEST не нужен идентификатор, но имя пользователя должно быть «Гость».

Попытки решения

Использование конструктора, похоже, игнорирует контекст.

Создание новых объектов для selected_user, new_user и guest_user кажется расточительным.

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

На данный момент я считаю, что я должен создать отдельную фабрику, которая имеет такие функции, как create_guest ($ x), create_new_user ($ x, $ y), create_registered_user ($ x, $ y, $ г)? Это позволило бы объекту пользователя иметь одну цель: удерживать пользователя (в то же время позволяя ему иметь конструктор, устанавливающий минимальные требования), а также иметь фабрику пользователей с единственной целью: инициирование различных типов пользователей.

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

Пример:

<?php
    class user
    {

        private id;
        private username;
        private privilege;

        public function __construct()
        {
            some code...
        }

        public function is_admin()
        {
            some code...
        }
    }
?>    

1 Ответ

0 голосов
/ 16 января 2012

Используя предоставленный класс, вы всегда можете автоматически инициализировать значение для $this->id, равное 0, и использовать его, чтобы определить, является ли этот пользователь гостем. Основная идея заключается в том, что в вашей базе данных никогда не будет идентификатора 0 (если вы используете автоинкремент для этого столбца).

Это также можно использовать для проверки необходимости обновления или создания записи. Простая проверка идентификатора покажет 0 или другое int. Если это 0, то это либо гость, либо он должен быть создан. Если оно больше 0, оно уже создано и требует обновления.

Как правило, я предпочитаю упаковать создание и обновление в сам пользовательский класс, добавив методы load(), update(), create() и delete(), где load() примет массив / объект, который в случае передачи будет использоваться для загрузки данных в текущий контекст или, если не предоставлено, функция попытается прочитать данные из другого источника (например, из БД).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...