Два метода set* и get* - как правильно?

Духовность™

Продвинутый новичок
Два метода set* и get* - как правильно?

PHP:
    /**
    * Возвращает дату последнего посещения пользователя.
    */
    public function getUserVisiting()
    {
        // что-то ещё...?

        return $this->user_visiting;
    }
    
    /**
    * Обновляет дату последнего посещения пользователя.
    */
    public function setUserVisiting()
    {
        // что-то ещё...?

        $this->db->query("UPDATE ...  `user_visiting` = NOW() ....");

        // что-то ещё...?
    }
Два метода - один возвращает дату посл. посещения пользователя, другой её устанавливает.

Вопрос: правильная ли реализация?

Возможные варианты:

1.
Метод get лезет в базу и возвращает значение.
Метод set лезет в базу и устанавливает значение.

2.
Метод get НЕ лезет в базу, а просто возвращает значение $this->user_visiting.
Метод set лезет в базу и устанавливает значение, после чего в $this->user_visiting устанавливается новое значение.

Как более правильно?
 

StUV

Rotaredom
Метод get лезет в базу и возвращает значение, если значение "не установлено"
 

korchasa

LIMB infected
PHP:
<?php
class Foo {
//Флаг грязности
  protected $isDirty = false;
//какое-то свойство
  protected $user_visiting;

/**
    * Возвращает дату последнего посещения пользователя.
    */
    public function getUserVisiting()
    {
        if(!$this->user_visiting) {
          $this->load();
        }
        return $this->user_visiting;
    }
    
    /**
    * Обновляет дату последнего посещения пользователя.
    */
    public function setUserVisiting($value)
    {
        $this->user_visiting = $value;
        $this->isDirty = true;
        // что-то ещё...?
    }
    
    public function load()
    {
      //выбираем все из базы и сохраняем во внутренние свойства
    }

    public function save()
    {
        if($this->isDirty) {
        //сохраняем в базу
        
        }
    }
 

Духовность™

Продвинутый новичок
м... один момент - user_visiting в конструкторе полюбому берётся из БД. Это как-то влияет?

-~{}~ 25.10.07 15:33:

korchasa а не слишком накладно столько методов юзать?... save() в деструкторе должен вызываться?
 

korchasa

LIMB infected
korchasa а не слишком накладно столько методов юзать?
Количество методов варьируеться от 2-х (load, save), до ..., все зависит от конкретной задачи. Предложенный мною вариант позволяет:
- "закрыть" способ хранения значений полей
- автоматизировать load
- контроллировать "грязность" объекта, т.е. недопускать лишних save/load операций
save() в деструкторе должен вызываться?
Ни дай бог! А если мне не надо сейвить, то как объект уничтожать?
м... один момент - user_visiting в конструкторе полюбому берётся из БД. Это как-то влияет?
set/get вам вообще тогда не нужны, скорее всего.
 

zerkms

TDD infected
Команда форума
korchasa
- автоматизировать load
- контроллировать "грязность" объекта, т.е. недопускать лишних save/load операций
предпосылки, после которых уже можно задуматься о
 

korchasa

LIMB infected
Автор оригинала: zerkms
korchasa
предпосылки, после которых уже можно задуматься о
А бы назвал предпосылками, необходимость полноценных бизнес-транзакций, с раскручиванием зависимостей, и полным контролем валидности объектов ;)
 
Сверху