| Pattern Name | Problem | Solution |
|---|---|---|
| Replay Changes | How can a client application preserve a user's changes after aborting a transaction? | The client keeps the changes independent from the view of the repository, so that when a view is refreshed, the changes may be replayed. |
| Transaction Specification | How can changes to domain model objects be saved independently from the domain model? | Save the sequence of messages that can be sent to cause the desired changes to occur. |
| Aspect Change Specification | How can a client application record a change to a domain model object independently from that object? | Specify the message that must be sent in order to accomplish the desired change. A message is completely specified by its receiver, method signature, and arguments. |
| Dirty Object Pool | How can a client application record a change to a domain model object independently from that object? | Keep a copy of the object in its changed state. |
| Locked Object | How can you reduce the risk of a commit failure when modifying an object? | Obtain a write lock on an object before modifying it. |
| Check Out Objects | How can you maintain a lock on an object for a long period of time? | Develop a lock table that holds persistent locks for objects that have been checked out. The application checks out a copy of the object, makes changes, and then checks in the changed copy. |