My buddy Joel over at Geniant has collected some nice links on the issue of designing versioning and extensibility into your SOA.
And my friend Andy at MS suggests these techniques for creating manageable services:
- Use complex-type messages, not simple type arguments. For instance instead of creating an operation like Customer GetCustomer(int customerId), create one like Customer GetCustomer(CustomerIdentity customerIdentity) this will allow each message to be created in an extensible way.
- Make each message extend from a base message that contains Xsd Any members for both elements and attributes. This will allow members to be added or removed from the message in the future with out breaking the existing consumer serialization.
- Separate the message classes from the implementation or domain classes. Keep a nice clean layered separation between interface and implementation. This will allow for better control on the interface and eliminate changes in the implementation that break the interface.
Comments