Yesterday I have come across very interesting question:Should one use raw XML as string or Objects as parameters of methods for passing data between tiers.I mostly use objects for doing so.Initially I had a bias towards that approach.But after pondering over the subject I found that both the approaches has it’s own pros and cons and one should choose based mostly on the non functional requirements(performance/maintainability/developer expertise) for the system under discussion.
- All the advantages of object oriented programming and design can be very well used.Code will be simpler and very easy to understand.
- When used in WebMethods the schema will be extracted via wsdl as XSD and it will be easier for the client code to interpret the meaning and purpose of the object.
- When the object is to be passed beyond process/machine boundary it will be serialized.
- For Web Services .NET Framework will be using the XML Serializer.
- For Remoting it can be the Binary as well as the SOAP formatter
- .NET XML Serialization internally generates an assembly at runtime for serialization.There will be one assembly per type passed to the constructor of the XMLSerializer constructor.Naturally there is a performance hit because of this.However this assemblies can be generated before hand using the tool SGen.exe.The detailed tips for improvement of XML Serialization can found in the patterns & practices guide.
- For any change in the object structure the proxies needs to updated.
- No additional serialization overhead.
- For any change in the object structure the proxies needs not be updated.However this can sighted as a disadvantage as well as the client contract will hazy.Client has to know before the xml structure.There is should be some XSD validation in the service as well.
- Program will be complex as one has to use XMLDOM and Xpath to parse and read/write the values from/into the XML.
That’s all I can think of at this point.
But I would still prefer objects with XMLSerializer unless my performance requirements vs server infrastructure is not at all able to take the load.