Zend Framework: rekordy i obiekty tabel dla nierozbudowanej strony/serwisu www
Od jakiegoś czasu zastanawiałem się ja zrobić Fabrykę dla modeli w moich wypocinach, ale zawsze wracałem do dopisywania kolejnych metod typu getProductsTable() w poprzedniej fabryce, i często tworzyłem też klasę dla tabeli. Wszystko ok jeśli klasy modeli się różnią między sobą, a w wielu przypadkach chciałem mieć tylko obiekt tabeli/modelu tylko po to by korzystać z metod typu: createRow, save itp.
Problem zostawiłem bo i czasu nie było, a nic do głowy mi nie przychodziło. Oczywiście do czasu olśnienia typu: KISS (Keep It Simple, Stupid), wyszła bardzo prosta klasa do tworzenia obiektów tabeli/modeli bez potrzeby definiowania dla każdego modelu oddzielnej klasy (o ile nie odbiega od standardu, u mnie to standard to klasa Vk_Db_Table).
Dzięki temu oszczędziłem sobie zbędnego tworzenia klas dla modeli, jeśli to jest zbędne, a jednocześnie mam wszystkie funkcjonalności Zend_Db_Table i Zend_Db_Table_Row dla utworzonych obiektów.
class Vk_ModelsCreator {
static protected $models = array();
/**
*
* @param string $modelName name of the table in Db
* @return Vk_Db_Table
*/
static public function create($modelName) {
if (!isset(self::$models[$modelName])) {
$config = array(
Vk_Db_Table::NAME => $modelName,
Vk_Db_Table::PRIMARY => 'id',
Vk_Db_Table::SEQUENCE => '"' . $modelName .'_id_seq"',
);
self::$models[$modelName] = new Vk_Db_Table($config);
}
return self::$models[$modelName];
}
}
Vk_Db_Table dziedziczy z Zend_Db_Table_Abstract
samo użycie narzędzia odbywa się poprzez, np:
$productsModel = Vk_ModelsCreator::create('products');
$newRow = $productsModel->createRow();
....
$newRow->save();
ogólnie wypada włączyć jeszcze cache'owanie dla obiektów tabel/modeli poprzez: ZendDbTable::setDefaultMetadataCache();
Dodaj komentarz| IT Ogólne PHP Programowanie Zend Framework | Permalink