Расширение классов [Пространство имен] _Model_ [Таблица]. это безопасно? - PullRequest
1 голос
/ 26 октября 2009

Я новичок в php и zend framework и очень сомневаюсь в следующем:

Например, у меня есть две таблицы:

table1: поле (id, высота, ширина, длина, вес)
table2: метки (id, boxid, текст, позиция)

tags.boxid -> box.id

(label.boxid - это ключ извне для primary_key box.id)

Я сгенерировал два отдельных стандартных класса Zend_Db_Table_Abstract + Model + Mapper для обеих таблиц, которые содержат все методы set, get, fetchAll, fetchList.

Вопрос: безопасно ли расширять Box Model до классов LabeledBox Model следующим образом:

class NS_Model_LabeledBox extends NS_Model_Box {
     protected $_labels;

     public function setLabels($objs)
     {
        $this->_labels=$objs;
        return $this;
     }

     public function getLabels()
     {
        return $this->_labels;
     }

     public function getMapper()
     {
        if (null === $this->_mapper) {
            $this->setMapper(new NS_Model_LabeledBoxMapper());
        }
        return $this->_mapper;
     }

}

вместе с классами Mapper, такими как:

  class NS_Model_LabeledBoxMapper extends NS_Model_BoxMapper {
         public function fetchAll()
        {
            $resultSet = $this->getDbTable()->fetchAll();
            $entries   = array();

            foreach ($resultSet as $row) {
               $entry = new NS_Model_Box();
               ...setting box properties code...

               //fetching and setting labels for the box
               $labels = new NS_Model_Labels();

               $entry->setLabels(
                     $labels->fetchList("boxid='" . $row->id . "'") 
                     );
            }

            $entries[] = $entry;
        }
  }

чтобы я наконец смог запустить:

$labeledbox = new NS_Model_LabeledBox();
$entries  = $labeledbox->fetchAll();

foreach($entries as $entry)
{
   echo $entry->getId();
   echo $entry->getWeight();
       foreach($entry->getLabels() as $lables)
       {
          echo $lables->getText();
       }
}

Этот код работает нормально для меня. Я просто не хочу оставаться в стороне, если выйдет новый релиз ZF с какими-либо существенными изменениями, которые могут повлиять на этот «трюк» (он все еще применяется к парадигме ООП).

1 Ответ

1 голос
/ 03 ноября 2009

Вы хорошо понимаете, как попасть в движущуюся цель, и до сих пор Zend Framework был таким. Я запустил два разных проекта на ZF 1.7.x и уже переписал некоторые классы из-за изменений в ZF. Конечно, это было скорее желание быть в курсе «стабильной» версии ZF, так что мне не пришлось этого делать.

Zend Framework, безусловно, является быстро развивающейся средой, и это то, что вам нужно учитывать при написании кода, особенно если говорить о нарушении обратной совместимости после выпуска 2.0.x

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