A managed collection is a collection of objects/data with the following properites:
- Collection is deemed to "own" the data which it contains; external pointers from outside the collection into the internals of the collection are ConsideredHarmful. External code may make copies of the data; or keep pointers if the data is invariant (in which case, a copy and a reference are semantically indistinguishable--assuming, of course, the collection doesn't overwrite the underyling storage in the presence of external pointers).
- Collection enforces one or more invariants on the data.
- Mutation of the data only occurs through "official" channels (often using transactions, which can fail if invariants aren't satisfied). ACID or ACI semantics are common (though not strictly required for some applications).
- This is one reason that keeping pointers to the guts is often verboten--if one can mutate a managed object directly; this might cause the invariant to become violated.
- Due to the use of transactions, other side effects can be made to occur upon completion of a transaction.
The canonical example of a ManagedCollection is a RelationalDatabase. Other database topologies may also qualify. The RelationalDatabase is a preferred solution for many applications. (At least by RelationalWeenies.)