Web Services Architecture Domain Model

I'm not in a position to provide any details just yet, but a couple of us on the patterns & practices team have teamed up with heavy hitters like Jason Hogg, Beat Schwegler, Christian Weyer, Wojtek KozaczynskiMaarten Mullender, Daniel Cazzulino, Victor Aprea, Hernan de Lahitte, and Pablo Galiano to provide some kick ass guidance around designing and developing Web services. During one of our meetings this week, we thought there might be some value in throwing together a domain model so we could make sure we were all singing from the same sheet of music when we used certain terms. This is a Visio version of what the whiteboard looked like after the meeting.

Click for a larger image of the Web Services Architecture Domain Model

This is by no means complete, but it illustrates some interesting concepts and commonly used terms. The first thing it illustrates is the almost 1 to 1 mapping of angle-bracket thingies and .NET thingies.

Also, in the context of the common "Contract First" phrase, you can not only see what comprises the contract on each side of the model, but get a visual sense of what contract first might mean. Contract first doesn't necessarily mean "fire up your favorite text editor and start handcoding WSDL". Of course, if you like doing that, you certainly can. But you can also start with C# if that is your preference. You can get yourself in trouble with either approach, but each approach is viable also ... start with whatever you're comfortable with ... just make sure you're thinking about the messages and the contract as a whole.

The other interesting thing this illustrates is the clear separation of the service, the adapter, and the business logic. This separation of concerns is an important architectural detail. Beat and I will be speaking specifically about this during our PDC pre-con session.