Often when developing a client-server application, it's desirable to keep your object model / value objects in sync between these two tiers. Simply put, this means having identical object representations on both the client and the server. The reason for this is, it keeps the codebase manageable and ultimately makes for a saner development environment. For example, if you're dealing with a RabidSquirrel class on the client-side you can rest assured that its frothingMouth property will be of identical naming and type when you receive it from the server. No guesswork. The only gotcha with this communication design decision is usually the implementation of an elegant transport strategy capable of taking a serialized model from one tier, deserializing it, and converting it to the respective strong-typed model on the other tier. The less this logic needs to know about the particular objects it's serializing and deserializing, the better.