Previous Table of Contents Next


Chapter 2
Applying Design Patterns and Frameworks to Develop Object-Oriented Communication Software

by Douglas C. Schmidt

2.1. Understanding Object-Oriented Communication Software

Communication software for next-generation distributed applications must be flexible to support a growing range of multimedia datatypes, traffic patterns, and end-to-end quality of service (QoS) requirements. Moreover, communication software must be efficient to provide both low latency to delay-sensitive applications (such as avionics, simulation, and call processing) and high performance to bandwidth-intensive applications (such as medical imaging, satellite surveillance, and teleconferencing) over high-speed and mobile networks.

Despite dramatic increases in computing power and network bandwidth, however, the cost of developing communication software remains high and the quality remains relatively low. Across the industry, this situation has produced a communication software crisis, with computing hardware and networks getting smaller, faster, and cheaper while communication software gets larger, slower, and more expensive to develop and maintain.

The challenges of communication software arise from inherent and accidental complexities (Brooks, 1975). Inherent complexities stem from fundamental challenges of developing communication software. Chief among these are detecting and recovering from network and host failures, minimizing the impact of communication latency, and determining an optimal partitioning of application service components and workload onto processing elements throughout a network.

The accidental complexities associated with communication software stem from limitations with conventional tools and techniques. For instance, low-level network programming interfaces, such as sockets, are tedious and error prone. Likewise, higher-level distributed object computing toolkits such as CORBA, DCOM, and Java RMI lack key features (such as asynchronous I/O and end-to-end QoS guarantees) and are not yet optimized for applications with stringent performance requirements (Schmidt, Gokhale, Harrison, & Parulkar, 1997).

Another source of accidental complexity arises from the widespread use of algorithmic design techniques (Booch, 1993) to develop communication software. Although graphical user interfaces (GUIs) are largely built using object-oriented techniques, communication software has traditionally been developed with algorithmic techniques. However, algorithmic design yields non-extensible software architectures that cannot be customized rapidly to meet changing application requirements. Therefore, in an era of deregulation and stiff global competition, it is prohibitively expensive and time-consuming to repeatedly develop applications from scratch using algorithmic design techniques.

The examples in this chapter focus on developing high-performance concurrent Web servers using the ACE framework (Schmidt & Suda, 1994). ACE is an object-oriented framework that provides core concurrency and distribution patterns (Schmidt, 1996a) related to the domain of communication software. The framework and patterns in this chapter are representative of solutions that have been successfully applied to communication systems ranging from telecommunication system management (Schmidt, 1996a) to enterprise medical imaging (Pyarali, Harrison, & Schmidt, 1996) and real-time avionics (Harrison, Levine, & Schmidt, 1997).

This paper is organized as follows: The first section presents an overview of patterns and frameworks, discussing the need for the type of communication software framework provided by ACE. Subsequent sections outline the structure of the ACE framework and illustrate how patterns and components in ACE can be applied to develop high-performance Web servers.

2.2. Applying Patterns and Frameworks to Communication Software

Object-oriented (OO) techniques provide principles, methods, and tools that significantly reduce the complexity and cost of developing communication software. The primary benefits of OO stem from its emphasis on modularity and extensibility, which encapsulate volatile implementation details behind stable interfaces and enhance software reuse by factoring out common object structures and functionality. This chapter illustrates how to produce flexible and efficient communication software using OO application frameworks and design patterns.

A framework is a reusable, semi-complete application that can be specialized to produce custom applications. A pattern represents a recurring solution to a software development problem within a particular context. Patterns and frameworks can be applied synergistically to improve the quality of communication software by capturing successful software development strategies. Patterns capture abstract designs and software architectures in a systematic and comprehensible format, whereas frameworks capture concrete designs, algorithms, and implementations in particular programming languages.


Previous Table of Contents Next