(I'm asking this with Visual Studio Web Applications in mind, but am interested in more high-concept answers)
Recent topic of conversation in my life with colleagues and friends has been how best to structure source files within a project. Not a source-control question or a development-environment question per se, I'm more interested in how people choose to group, name or otherwise manage their projects.
The way I'm working right now is based on a ruleset.
- web.config + global.asax at the root
- web surface pages at the root
- deeper web content in appropriately nested folders
- resource files (css, js, images, transforms, error pages, config) in a "resources" directory then nested by type
- non-codebehind classes in namespace appropriate folders prefixed with an underscore (so they are grouped at the top of VS's project explorer)
- generic utilities (config reader, xslt manager, DAL) in a "_utils" folder.
- abstract classes also prefixed with an underscore (so they are grouped at the top of a folder)
Unfortunately this has broken a bit since I introduced unit-testing and interfaces to the company, and all too often results in a ubiquitous "businessobjects" namespace, hence the conversation/debate/sulk :)
So how do you handle this? I've heard of teams who create "Interface" folders, who create a folder for each custom object base-class, or even who dump all the code in the root and prefix filenames ($ for structs, "C" for classes, "A" for abstracts). Obviously what works for one project type won't necessarily for another, but are there best-practices common to all?