Pracuję nad utworzeniem warstwy domeny w Zend Framework, która jest oddzielna od warstwy dostępu do danych. Warstwa dostępu do danych składa się z dwóch głównych obiektów, bramy danych tabeli i bramki danych wiersza. Jak na post Bill Karwin do this earlier question teraz mam następujący kod dla mojej domeny Osoba obiektu:Jak zaprojektować obiekty warstwy domeny do reprezentowania wielu obiektów i pojedynczego obiektu w Zend Framework?
class Model_Row_Person
{
protected $_gateway;
public function __construct(Zend_Db_Table_Row $gateway)
{
$this->_gateway = $gateway;
}
public function login($userName, $password)
{
}
public function setPassword($password)
{
}
}
Jednak ta działa tylko z pojedynczego rzędu. Muszę również utworzyć obiekt domeny, który może reprezentować całą tabelę i (prawdopodobnie) może być użyty do iteracji przez wszystkie osoby w tabeli i zwrócenia odpowiedniego typu obiektu (administrator, nabywca, itp.) Do użycia. Zasadniczo, wyobrażam sobie coś takiego:
class Model_Table_Person implements SeekableIterator, Countable, ArrayAccess
{
protected $_gateway;
public function __construct(Model_DbTable_Person $gateway)
{
$this->_gateway = $gateway;
}
public function current()
{
$current = $this->_gateway->fetchRow($this->_pointer);
return $this->_getUser($current);
}
private function _getUser(Zend_Db_Table_Row $current)
{
switch($current->userType)
{
case 'admin':
return new Model_Row_Administrator($current);
break;
case 'associate':
return new Model_Row_Associate($current);
break;
}
}
}
Czy jest to dobry/zły sposób radzenia sobie z tym konkretnym problemem? Jakie ulepszenia lub poprawki powinienem wprowadzić do ogólnego projektu?
Z góry dziękuję za uwagi i uwagi.
BTW, użyłem tego jako ćwiczenia, aby nauczyć się kodu PHP w nowym NetBeans 6.5. To rządzi! –
Dwa pytania: 1) Myślałem, że metody statyczne są złe, dlatego próbowałem stworzyć metody na poziomie tabeli jako metody instancji. Czy Zend Framework obsługuje klasę Finder? –
2) Czy jest jakiś szczególny powód, dla którego zmieniono nazwę metody wyszukiwania na klasę modelu? Czy używałbyś nadal tej samej logiki do implementacji konkretnych metod getBy i getCollectionBy? –