When one user commits a transaction that updates the domain model on the server, how can a client application display these changes to a different user?
You are developing a multi-user application that commits transactions on an application server. Changes to persistent data should be propagated to everyone viewing the data.
The client aborts its transaction periodically, in order to refresh its view of the repository.
Changes from other transactions can only be introduced at transaction boundaries, so the client developer needs to consider when it is appropriate to refresh its view based on the transaction model that has been chosen.
Updating a view could overwrite changes that are in progress by the end user. Therefore, it may be necessary to represent the user's changes independently of the view.
An advantage of this solution is that it puts the client in control of when to receive updates of shared persistent data. The client explicitly checks for updates whenever it is willing to update its view. In contrast to pushing domain model changes, there is no wasted processing time when the client is not interested in updating its view.
A disadvantage is that the client may waste time and resources polling for changes when none have occurred. If updating a view is expensive, e.g. on a slow network, the client may experience unnecessary delays when there are no changes to the components in which it is interested.