[DAN]
Старожил PHPClub
Проблема с дизайном кода
Всем привет, sorry, что пишу сюда.
Возникла проблема с дизайном кода, надеюсь на вашу помощь, особенно на помощь инфицированных TDD ))
Задача следующая. Есть базовый класс, который несет в себе часть общего функционала, и выступает также в роли интерфейса.
Есть производные классы, расширяющие функционал базового. Код примерно такой:
Проблема в следующем. При вызове ExtClass::save() вызывается явно BaseClass::save(), в котором также явно вызывается getProperties(). Но по правилам полиморфизма в BaseClass идет вызов ExtClass::getPropterties(), что есс-но возвращает массив с тремя элементами вместо необходимых двух. От этого валится работа DB::autoExecute(), так как появляются лишние для базового класса BaseClass данные.
Так вот, как бы мне разделить методы getProperties(), чтоб для базового класса возвращались именно его свойства.
Напомню, что базовый класс также несет в себе интерфейс.
Буду рад услышать предложения по редизайну, а может и другому решению.
Спасибо.
Всем привет, sorry, что пишу сюда.
Возникла проблема с дизайном кода, надеюсь на вашу помощь, особенно на помощь инфицированных TDD ))
Задача следующая. Есть базовый класс, который несет в себе часть общего функционала, и выступает также в роли интерфейса.
Есть производные классы, расширяющие функционал базового. Код примерно такой:
PHP:
class BaseClass
{
var $dbh;
var $propOne;
var $propTwo;
function BaseClass( &$dbh ){
//set database handler here
}
function & getProperties(){
$array[1] = $this->propOne;
$array[2] = $this->propTwo;
return $array;
}
function save(){
$props =& $this->getProperties();
// save data using PEAR::DB autoExecute method.
}
}
class ExtClass extends BaseClass
{
var $propThree;
function & getProperties(){
$array =& parent::getProperties();
$array[3] = $this->propThree;
return $array;
}
function save(){
parent::save();
$props =& $this->getProperties();
// save data using PEAR::DB autoExecute method.
}
}
Так вот, как бы мне разделить методы getProperties(), чтоб для базового класса возвращались именно его свойства.
Напомню, что базовый класс также несет в себе интерфейс.
Буду рад услышать предложения по редизайну, а может и другому решению.
Спасибо.