While you frequently don't want one monolithic assembly for anything more than a small project, it's possible to separate things too much.
What are the signs/smells of too much assembly separation?
While you frequently don't want one monolithic assembly for anything more than a small project, it's possible to separate things too much.
What are the signs/smells of too much assembly separation?
One sign/smell is if everything in the assembly is public: instead, ideally there might be a small public facade wrapping/hiding a larger internal implementation.
The first (obvious) one is: in a solution with lots of projects, assemblies with only a handful (say, 3-4) classes in them (an assembly with only interfaces may be an exception to this).
Another: If an assembly somewhere in the middle layer of your project has to import a ton of other assemblies in order to do its job.
Pushing in the other direction, you may have too little assembly separation if you have a whole bunch of unrelated things in the same assembly.
An approach suggested to me, that I found useful, was to keep functional subsystems in discrete assemblies. Some of these subsystems can be huge - and some can be fairly small.