Last week we (the Microsoft patterns & practices team ) released the Web Service Software Factory (or WSSF), the Modeling Edition (WSSF MD). When I looked back I realized that this factory is a cumulative result of an interesting chain of developments. I don't know how soon patterns & practices will build another factory like this one and when it does, I probably will not be participating in that work. So I thought it would be nice to recount those developments before we all forget about them. The diagram below should help.


The story starts almost 3 years ago when David Trowbridge and his team were working on the Integration Patterns (Integration Patterns) and Daniel Cazullino (Kzu), Oscar Calvo (Oscar), Tom Hollander (Tom) and I were working of GAX and GET. I was arguing with David about how to best package guidance in Visual Studio. He finally got my point, looked at me and said: "So you want to build toolkits for architecture baselines." This is how the term Baseline Architecture Toolkit (or BAT for short) was born and this is the term Eugenio Pace (Eugenio) and I used when we started developing what later became the Smart Client Software Factory. We changed the name when Tom and I agreed that there were more similarities between BATs and Software Factories described by Jack Greenfield (Jack) than differences. We understood that there were differences, but our thinking was that it would be better to have one term, not two.

At the same time Stuart Kent (Stuart), Steve Cook (Steve) and Gareth Jones (Gareth) were busy developing the Domain Specific Languages (DSL) SDK (DSL Tools). We cooperated with them very closely because GAX and DSL SDK share the code templating engine.

The Smart Client Software Factory is what we call a wizard-driven factory, that uses only GAX. It was followed by two versions of GAX-based Web Service Software Factory. This effort was led by Jason Hogg (Jason) and Don Smith (Don).

At about the the same time two factory efforts started that used both GAX and DLSs. The first one was Mauro Regio's (Mauro) HL7 Factory (HL7 SF) and the second was Jezz Santos' (Jezz) EFx Software Factory (EFx SF). Since Mauro's factory uses a number of interacting DSL designers, he was the first one who was really faced with the model integration problem. Daniel Cazzulino was one of the HL7 factory developers and from what I recall, he and Victore Aprea (vga) developed the first version of the Designer Integration Service, which is a Visual Studio service that can create, resolve and navigate cross-model links. Jezz, on the other hand, was the first who separated technology-independent models from technology-specific extensions. We reused his experiences when creating the Web Service factory model extension framework.  

In the meantime the second version of Web Service Software Factory was very well received, but the overwhelming community demand was to simplify its user experience by introducing models. So in February we started the development of the modeling addition, and it was finished in October. The factory uses three types of models to generate service code

  • Service Contract models
  • Data Contract models, and
  • Hosting models.

The factory uses GAX, DSL SDK and a modified version of the DIS. It also introduces model, code generation, and validation extensions of the DSL toolkit. It is the first fully articulated, model-driven factory (automation, reference implementations, documentation, etc.) released by patterns & practices.