A Generative Pattern Language for Distributed Processing

By: D.L. DeBruler
Published in: PLoPD1
Pages: 69-89

Strategies for decomposing complex software systems across processing nodes.

Category: Design Process, Distributed Systems

Summary: Strategies for decomposing complex software systems across processing nodes.

Url: http://www.bell-labs.com/people/cope/Patterns/DistributedProcessing/DeBruler/index.html

Pattern: Define the Data Structure

Pages: 71-72

For a large, distributed programming problem, to begin architecture and design, ignore everything about the distributed nature of the hardware and do a data structure analysis. Use Identify the Nouns, Factor Out Common Attributes, Normalize the Roles, and Identify Problem Domain Relationships.

Category: Design Process, Distributed Systems

Pattern: Identify the Nouns

Pages: 72-73

You're using Define the Data Structure. Brainstorm the values, attributes, and roles in the system, and give them precise names.

Category: Design Process

Pattern: Factor Out Common Attributes

Pages: 73-77

You've applied Identify the Nouns. To maximize reuse, identify the role inheritance structure.

Category: Design Process

Pattern: Normalize the Roles

Pages: 77-79

You've applied Factor Out Common Attributes. Attributes are defined for one large role that should be defined for multiple related roles. Apply the normalization techniques developed for relational database models.

Category: Design Process

Pattern: Identify Problem Domain Relationships

Pages: 79-81

You've applied Normalize the Roles. Many relationships are implicitly identified as compound roles during Identify the Nouns, but pure relationships need more effort to capture. Convert many-to-many relationships to two functional mappings and a role.

Category: Design Process

Pattern: Introduce Virtual Attributes

Pages: 81-82

An implementation of the data model produced in Define the Data Structure has complicated navigation code. Use accessor methods for all attributes. If there is a unique path to an ancestor node, all attributes of all roles in the path are propagated as virtual attributes of the role under consideration.

Category: Design Process

Pattern: Animate the Data

Pages: 82-83

You're using Define the Data Structure and have reached the point of diminishing returns. Use Time Thread Analysis and Determine the Actors

Category: Design Process

Pattern: Time Thread Analysis

Pages: 83-84

You're ready for Animate the Data. How are data created and changed? Use time thread analysis. List the events and transactions in the real world. For each event, trace the causality flow through the roles of the data structure and note actions performed by each role.

Category: Concurrent Systems, Design Process, Event-Driven Systems

Pattern: Determine the Actors

Pages: 84-85

You've identified the actions each role should perform in response to events. To determine what code is to be executed when an event occurs, use objects, callbacks, and FSMs.

Category: Concurrent Systems, Design Process, Event-Driven Systems