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
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
Pages: 72-73
You're using Define the Data Structure. Brainstorm the values, attributes, and roles in the system, and give them precise names.
Pages: 73-77
You've applied Identify the Nouns. To maximize reuse, identify the role inheritance structure.
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.
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.
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.
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
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
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