Cześć!
Czy proszę mi poradzić, co jest bardziej po bożemu? Klasa A z metodami przydatnymi każdej klasie specjalistycznej B czy C.
Klasę A z pewnymi metodami rozszerzyć za pomocą klasy B, C czy innej i z każdą instancją B czy C mieć niejako nową instancję A
czy
Stworzyć jedną instancję klasy A i z tworzeniem obiektu klasy B lub C przekazać obiekt A w argumencie?
Aplikacja ma z 12k linijek ciąglę się biję z myślami jak to powinno działać. Sensowne wydaje się mieć jedną instancję A i podawać do każdej klasie specjalistycznej B czy C jako argument i tak zrobiłem, niemniej myśli mnie nie opuszczają.
class Main
{
// general methods
}
class First extends Main
{
// module 1 special methods
}
class Secound extends Main
{
// module 2 special methods
}
$inst1 = new First;
$inst2 = new Secound;
class Main
{
// general methods
}
class First
{
private $mainClass;
public function __construct(object $mainClass)
{
$this->mainClass = $mainClass;
}
// module 1 special methods
}
class Secound
{
private $mainClass;
public function __construct(object $mainClass)
{
$this->mainClass = $mainClass;
}
// module 2 special methods
}
$mainClass = new Main;
$inst1 = new First($mainClass);
$inst2 = new Secound($mainClass);
Zwykle będzie tylko jedna instancja klasy specjalizującej więc luz. Może czasem się zdarzyć że będą dwie instancje klas specjalizujących i wtedy - w mojej głowie, jest dwa razy rozszerzana klasa A, niejako duplikowana co wydaje się bezsensowne. W drugim rozwiązaniu referencja do obiektu A bez niepotrzebnego duplikowania wynikającego z dziedziczenia. Mimo wszystko kod jednak lepiej obrazuje niż ten opis :P