Putting code and data into a single thing is a bad idea for distributed systems. Behavior is bound to the role that data plays in a functional scope. Presentation is a scope, calculation, combination, aggregation and validation are scopes, services and resource access is a scope. Having all code for all scopes on a single thing is bad. "Technology choice" causes inability to share implementation across organization boundaries. Mobile devices and web services are both like the "big bang": things get further and further away from each other (in terms of geography, trust and organizational association), causing more inability to share implementation and causing behavior that's bound to data and is located at central places to be the mother of all bottlenecks and plenty of other problems for scenarios where the boundary between tiers may ever have such "far" characteristics. I leave the conclusions to the reader, but here's a hint: MarshalByRefObject