Accountability and Organizational Structures

By: M. Fowler
Published in: PLoPD2
Pages: 353-370
Category: Analysis

Summary: Patterns for analysis and design.

Pattern: Party

Pages: 359

Define a party object as a supertype for a person or an organization. This allows relationships to be established between a person or an organization by relating to a party.

Pattern: Recursive Structures for Organizations

Pages: 359-361

You need to describe an organization with a strict hierarchy. The levels change but not frequently. Use a recursive relationship on organization.

Pattern: Abstract Models with Constraints in Subtypes

Pages: 361-362

Should you choose a more abstract model or a more specific one? Create an abstract model for flexibility, and use subtypes to enforce the rules.

Category: Analysis, System Modelling

Pattern: Multiple Hierarchic Associations

Pages: 362-363

The enterprise is a matrix organization with more than one hierarchy. Apply Recursive Structures for Organizations for each hierarchy. Each hierarchy gets an association on organization and a partition of subtypes for the levels.

Pattern: Organizational Structure-Typed Relationship

Pages: 363-364

There are many links in the enterprise and the links may change frequently. You may need to keep a history of past structures. Add an association type and an organizational structure type. Each instance of an organizational structure type represents a kind of organizational relationship. Time may be added to a structure to record history.

Pattern: Objectify Associations

Pages: 364-365

You need to add a feature to an association, but it's inappropriate to add it to either type. Turn the association into a type with associations to the participating types and add the feature to the association.

Pattern: Typed Relationship

Pages: 365

Many similar associations are bloating a type. Use Objectify Associations and add an association type attribute; one instance is created for each association in this structure.

Pattern: Accountability Abstraction

Pages: 366-367

Similar structural relationships exist between organizations, between people, and between people and organizations. Use Typed Relationship to abstract the relationships and create an accountability type.

Pattern: Accountability Knowledge Level

Pages: 367

Separate an organizational model into operational and knowledge levels. The operational level comprises accountability, party, and their interrelationships. The knowledge level comprises accountability type, party type, and their interrelationships.

Category: Analysis, System Modelling

Pattern: Put Frequently Varying Structures in Instances

Pages: 367-368

It isn't easy to change a model. Design the model so frequent changes affect instances of types in the same type structure.

Category: Analysis, System Modelling

Pattern: Knowledge Level

Pages: 369-370

Changes in the structure of types occur with changes in the business practice. A model for the day-to-day operational aspects of the problem has been developed. Create a knowledge level for the model. Each type on the operational level has a corresponding type on the knowledge level. An association links the operational type to its corresponding knowledge type. Relationships between knowledge types define the possible links between the operational types.

Category: Analysis, System Modelling