In this series, I will help you get started with WCSF developed by Patterns and Practices team at Microsoft. If you are a web developer then this Software Factory will be of great help for you in your upcoming web projects.
Let me start of with the basics in order to speed you up with certain basic concepts which would be helpful to understand WCSF. Although the WCSF documentation is a great one, but if you are lazy as I am , you would not want to spend a lot of time in reading it but would be happy to see a quick get start on this.
A software factory is a proven set of standard industry practices based on Software Engineering Principles , that helps the architect build a uniform set of software assets and tools.
Software assets include reusable code components, documentation, and reference implementations. Software tools include wizards, code generators, and visual designers. Typically, a software factory provides templates and other tools to help a development team quickly start development of new applications. It also continues to assist the developers by providing guidance and automation of the prescribed development activities throughout the application development life cycle.
Guidance Package consists of set of recipes and templates to allow developers to perform a set of development tasks defined by the package author. In the absence of this, the developer would have to do these tasks manually. Guidance Package enables the developer to automate these recipes. As an example Web Client Software Factory has a Recipe that allows the developer to add a View.
Composite Web Applications
Pictures talk more than the words. Here in this diagram we have different pieces of components that come together to give the user all the required features. However, the user does not know of the various components, since this is all integrated to one single web application to give an end user experience.
This entire principle is known as Composite Pattern.
Shell And Modules
A Composite Pattern generally divides the solution in to Shells and Modules. Shells are responsible for giving the user interface structure whereas the modules are functionality discrete pieces, integrate with user interface and communicate with Shells.
This helps in separation of concerns and thus helps in providing an environment for Test Driven Development and also helps separation of roles between developers.