We promote the expression of subscription patterns as a combination of
instances of our predefined condition classes.
An alternative to this consists in allowing the application to provide
directly its own static filter objects (byte code). Patterns expressed
this way are however opaque and not necessarily correct nor safe, and
make optimizations difficult.
Nevertheless, we have opted for an open design, i.e., separation of interfaces and classes (e.g., Accessor/Invoke) vs conditions and accessors as final classes. This enables the extension of our subscription API with application-defined accessors and conditions. Our proposed optimizations can still be enforced by following certain design guidelines.