There is such an anti- God pattern as the Divine Object . His main feature is that he can do anything. Such an object violates the principle of sole responsibility , and, most likely, it can be divided into three or four unrelated classes.
If you look at the same situation from a different angle, you can talk about it as an error of decomposition: jumping down several levels. For example, a substance consists of molecules, a molecule of atoms, atoms of protons, neutrons and electrons, protons and electrons of quarks. Naturally, we can say that the molecules are made up of protons and electrons, and this is true, but by missing atoms, you get a very confusing picture of the molecule. Atoms can significantly simplify the model.
Bob Martin in Clean Code describes one of the code smells: calling methods of different levels of detail. This is the case when decomposing molecules, the programmer sometimes works with them as with a set of atoms, and sometimes as with a set of elementary particles.
Most likely in this case, you can abandon the fifteen classes, in favor of three or four, each of which consists of three or four smaller classes.
The number of classes you have will increase, as intermediate ones will appear; but each of them will now be easy to understand.
On the other hand, there are situations when a large number of parameters is quite acceptable. Martin Fowler described the Registry pattern, which provides access to a set of objects of the same type. Let's say you need 5 or 6 repositories and, instead of transferring them one by one, you start a register of repositories and transfer only this object. At the same time, the registry itself now transfers all the repositories that are in your program as design parameters. Since all repositories belong to the same category of objects, the registry code is simple and straightforward. In this case, the registry designer has 15-20 parameters and it still looks awful. I would call this incident an inevitable evil, and would attribute its cause to the limited expressive means of the language. In general, sometimes we just have to write like that, because otherwise the language does not allow. But be careful - before deciding that everything with your code is in order, check that it is not about the first case: a divine object and a mix of levels of detail.