Project Definition: Build an e-commerce site that can be viewed in multiple languages.
Development Team: 3 Developers, 1 CM, 1 QA, 1 BA, and a customer
There are so many factors that come into play when getting started on a new development project. I think that starting with a good project structure is key. It should be flexible enough to allow for expansion of the system, but rigid enough to have some recognizable structure that any new developer or business entity can recognize. Take some time to plan out your initial solution structure, it will be with you for the life of the project. I prefer to keep the project as modular and decoupled as possible to allow for rapid change. We will approach the development in an Agile fashion.
Building the initial file structure looks like a good place to start. I prefer to start with a blank solution in Visual Studio. This allows me to have a clean endpoint for the development of the rest of structure. Create a root folder for the “System”. I truly like to put the root namespace of the system as the folder name, but that is just my preference.
Inside of the solution folder, I initially add a src folder to hold initial projects within the solution. I do this because there may be other artifacts that I choose to add to the solution that have no relevance to the source code.
Inside of the source folder, I add a new project that is relevant to the solution. Here is a view how it looks in the Visual Studio Explorer Window compared to Windows Explorer. Notice that the project in Windows explorer is in its own directory.
Continue to add as many projects under the src folder that you need. Again, notice that the folders are namespaced for the projects. I have had solutions that contained over 100 projects and this was a great way to help organize it for a couple of reasons. At the solution folder level, several solutions can be created with subsets of projects. Also, project references became a lot easier to use and maintain. Developers could bring down the source code into different folder names because projects were referenced with relative paths.
I have taken the following approach with structuring the tree for projects. I like to have 3 folders underneath each project:
- src – Place all source for the project underneath this folder. One of the cons to this is how Visual Studio creates namespaces based upon folder names (Project Namespace + folder name). I don’t like this approach and manage my namespaces according to the functionality.
- libs – These are any 3rd party or in house libraries that may be reference in the project. This way a project is self contained.
- tools – I primarily use this with test libraries, putting a copy of NUnit in the project. This can also house special items used in builds, deployment or any other use you may have.
At the end, here is a default project with the three folders