Recently I worked on a project using Flex to create a front-end for Java-based Web Services. I ran into a favorite in the Java world: Transfer Objects/Value Objects. Early in the project, I was a bit skeptical of the transfer object model but, later on, I came to respect the value that it offers.
Transfer objects let two separate systems trade descriptive data objects without fear that either system will mistype the data or change the variable names. Transfer objects are an explicit agreement on how data will be encapsulated. They make integration easier because everyone can separate and build their system knowing what variable names and types will be traded. When someone modifies his version of the transfer object, the compile process should catch the changes and alert the file locations to fix the problems.