I’m building an application and as time goes on, I have more and more objects to initialize at startup. Moveover, some of the newer objects depend on others so I’m getting some kind of spaggetti initialization where objects are created then passed to other constructors. I’m suspecting that I’m getting it wrong.
For example I have a WinForm which accepts a “Controller” class and 2 events. The controller needs to be told about the existence of a DataGridView from the WinForm so it has a method
Controller::SetDataGridReference(DataGridView^ dgv)
Is there a general method of instanciating objects at startup then referencing those objects to each another?
I’ve been told that putting all the required classes as constructor parameters is a good practice but frankly, I don’t see how I can do that here.
I don’t really think that the language matters
This looks like a textbook case for using dependency injection (DI). It will certainly help with your spaghetti code and can even assist with unit testing. If you want to make a gradual migration towards DI you might want to consider refactoring the objects with similar relationships and using a few sets of factory classes that can handle all the boilerplate chain intialization as well as centralizing where all that takes place in your code base.
I can recommend Google Guice as a good DI framework for Java. Even if you arent using Java it is a good DI model to compare against other language’s DI frameworks