Dovolil bych si na krátké ukázce kódu srovnat klasické dědění tříd a kompozici, za využití Nette\ComponentModel. Ukázky kódu nejsou identické, jde jen o demonstraci síly kompozice.
Dědičnost
class PersonForm extends Nette\Application\UI\Form
{
public function __construct()
{
parent::__construct();
$this->addText('name', 'Jméno');
$this->addSubmit('submit', 'Odeslat');
}
}
class PersonWithAddressForm extends PersonForm
{
public function __construct()
{
parent::__construct();
$this->addText('city', 'Město');
$this->addText('street', 'Ulice');
}
}
Kompozice
class PersonContainer extends Nette\Forms\Container
{
public function __construct()
{
parent::__construct();
$this->addText('name', 'Jméno');
$this->addText('surname', 'Příjmení');
}
}
class AddressContainer extends Nette\Forms\Container
{
public function __construct()
{
parent::__construct();
$this->addText('city', 'Město');
$this->addText('street', 'Ulice');
}
}
class MyPresenter extends BasePresenter
{
protected function createComponentPersonWithAddressForm()
{
$form = new Nette\Application\UI\Form;
$form['user'] = new PersonContainer();
$form['user']['address'] = new AddressContainer();
$form['user']['correspondence'] = new AddressContainer();
$form['user']['billing'] = new AddressContainer();
$form->addSubmit('submit', 'Odeslat');
$form->onSuccess[] = function () {};
return $form;
}
}
Dovolil bych si na krátké ukázce kódu srovnat klasické dědění tříd a kompozici, za využití Nette\ComponentModel. Ukázky kódu nejsou identické, jde jen o demonstraci síly kompozice.
Dědičnost
Kompozice