私は、プロジェクトをいわゆる「展開単位」に分割しようとしています。つまり、「これらのアセンブリを展開するにはどうすればよいか?」
私は明らかに単体テストを展開していないので、それらは独自のプロジェクトにあります。
I then divide UI and "business logic" into separate projects. If I keep those lines of separation clean, I can replace my UI layer with a new technology or infrastructure (think WPF vs. ASP.NET) and still reuse the "business logic" assemblies for both. I just introduce a new UI layer that understands the business logic interface.
I also try to keep a separate library for code that I might share between solutions. This would be my data access utilities, file parsing utilities, and others that I use over and over as I build projects. I can just include those assemblies into my new solutions and I get all of that functionality that I've already invested my time in.
Hope that helps.