OK, i’m creating a small PHP application. The current structure is something like this:
$client = new AppName\Client;
$model = $client->getModel();
$model->getNode();
Everything is beautiful here. Client is responsible for connecting and running commands through Socket to a small C application i built. I’m just playing with architecture here. Client::getModel returns an instance of Model. During getModel, i inject Client inside Model through the constructor. Something like this:
public function getModel()
{
return new Model('parameter', $this);
}
Which, in turn…
// Model
public function __construct($param, Client $client)
{
$this->setClient($client);
// ...
}
However, during Model::getNode, i want to return an instance of Node. However, unlike getModel, i don’t want to inject Client again. But i have to. Right now, i’m doing this:
public function getNode()
{
return new Node('parameter', $this->getClient());
}
I’m sure this isn’t correct. There must be something that i’m missing… i understand and use Dependency Injection, but i’m quite sure a Dependency Injection Container will not solve my problem.
I can’t really speak to your entire design because you didn’t post most of it, but I think there is a pattern you are missing. One of the core OO design principles is that you don’t ask an object for data/objects and then operate on that data/object, you ask an object to DO something for you–perhaps that part was just edited for brevity, but you might want to consider doing less “Getting”.
In order to force this in my own design I NEVER create setters and getters on the first pass (Well, I pretty much NEVER create setters at all). Later I will go in and add getters only when I can’t avoid them (you do still need them quite often I think…)
Another thing is to completely avoid inheritance until you are absolutely it’s the only way to solve a problem without duplicating code or making things confusing. Problem is, the question isn’t coded in my native language so I really can’t tell what all you are doing.