Estoy trabajando en la creación de una capa de dominio en Zend Framework que está separada de la capa de acceso a datos. La capa de acceso a datos se compone de dos objetos principales, una puerta de enlace de datos de tabla y una puerta de enlace de datos de fila. De acuerdo con la respuesta de Bill Karwin a this earlier question ahora tengo el siguiente código para mi persona objeto de dominio:¿Cómo diseñar objetos de capa de dominio para representar objetos múltiples y un solo objeto en 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)
{
}
}
Sin embargo, esto sólo funciona con una fila individual. También necesito crear un objeto de dominio que pueda representar toda la tabla y (presumiblemente) se puede usar para iterar a través de todas las personas en la tabla y devolver el tipo apropiado de objeto de persona (administrador, comprador, etc.) para su uso. Básicamente, me imagino algo como lo siguiente:
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;
}
}
}
es que esto es así bueno/malo para manejar este problema en particular? ¿Qué mejoras o ajustes debo hacer en el diseño general?
Gracias de antemano por sus comentarios y críticas.
Por cierto, utilicé esto como un ejercicio para aprender a codificar PHP en el nuevo NetBeans 6.5. ¡Oscila! –
Dos preguntas: 1) Pensé que los métodos estáticos eran malos, por eso intentaba crear los métodos de tabla como métodos de instancia. ¿Zend Framework admitiría una clase Finder? –
2) ¿Existe alguna razón particular por la que haya cambiado el nombre del método de búsqueda para obtener en la clase de modelo? ¿Y utilizarías continuar usando la misma lógica para implementar métodos específicos getBy y getCollectionBy? –