This document discusses various design patterns for distributed systems, including service orientation patterns and CQRS (Command Query Responsibility Segregation). It defines common patterns such as service gateway, remote facade, and data transport object. It also discusses anti-patterns and provides examples of how to properly design services and separate commands from queries. The document is intended as a lesson on these patterns and techniques for programming distributed systems.