This paper presents an approach for designing complex distributed systems based on CORBA. The approach stems from the integration of an object-oriented (OO) development process, the GRASP patterns, and the environmental object model. GRASP is a structured OO analysis and design method; it is use-cases driven, pattern-based, iterative and incremental, and it provides the software engineer with sound guidelines for analyzing system requirements and for high-level design of the software infrastructure. The environmental object model is the basis of a component-oriented design method specifically defined to address issues of distribution in the design of CORBA systems. Our approach is based on the integration of the environmental model into the GRASP approach. We use the Unified Modeling language (UML) for system modeling. We define a new UML stereotype, the environmental class, in order to include in a class specification aspects of synchronization and concurrency, and a new, type of link, named containment (a special kind of aggregation) that highlights the containment tree on the class diagram. Issues of the proposed integrated approach are discussed in the framework of a real-world complex CORBA-based system, represented by an intelligent building management system.