HalfObjectPlusProtocol was published in volume 1 of PatternLanguagesOfProgramDesign by GerardMeszaros. Its synopsis is:
-
- Divide an object which needs to be accessed from more than one address space into two interdependent half-objects (one in each address space) with a protocol between them. In each address space, implement whatever functionality is required to interact efficiently with the other objects in that address space. (This may result in duplicated functionality, i.e., implemented in both address spaces.) Define the protocol between the two half-objects so that it co-ordinates the activities of the two half-objects and carries the essential information that needs to be passed between the address spaces.
-
- Patterns which solve the same problem include RemoteProxy (which delegates all requests back to a single site) and CachingProxy? (which caches the results of some requests to reduce delays and network traffic.) RemoteProcedureCall solves the same problem in a different way; it exposes the fact that the target object is in a different address space to the client, which results in client software which "knows" about the distributed nature of the application.
The pattern includes figures that show flow of control traces that make the distinction between the various alternatives clear. The following link will retrieve the text of the pattern, but not the figures.
http://www.bell-labs.com/topic/books/PLoPD1/manuscripts/HalfObjectPlusProtocol.html
For an instance of this pattern see IBM's UltraLightweightClient (http://www.software.ibm.com/ad/smalltalk/about/ulcfact.html) -- ThomasMaeder
They've also (just now) done one of these for their VisualAge for Java environment. It's aimed at reducing the hideous bloat of Java applications and applets (particularly with full GUIs). See http://www.software.ibm.com/ad/r/99enews9/vajulc/. -- RichardEmerson
The problem with caching is how to invalidate the cache. Data ages; machines go down. The framework for ensuring cache consistency can be very complex.
I'm convinced that there's a pattern language here. Let's hack at it at HoppPatternLanguage.
CategoryPattern