= Anatomy of a !MeshBase = [wiki:MeshBase MeshBases] are the containers for [wiki:MeshObject MeshObjects]. They have the following characteristics: == General == * Each MeshBase has a unique identifier, called the MeshBaseIdentifier. * Any MeshBase provides methods to find contained [wiki:MeshObject MeshObjects] by MeshObjectIdentifier and possibly by other criteria. * Any MeshBase has a reference to the ModelBase that contains the [wiki:Model] governing the content of the MeshBase. * Any MeshBase has an associated MeshObjectSetFactory object that knows how to construct [wiki:MeshObjectSet MeshObjectSets] appropriate for this MeshBase implementation. * Any MeshBase has an associated MeshObjectIdentifierFactory object that knows how to construct instances of MeshObjectIdentifier appropriate for [wiki:MeshObject MeshObjects] in this MeshBase. == !HomeObject == * Each MeshBase contains at least one MeshObject, called the MeshBase's HomeObject. * A MeshBase's HomeObject cannot be deleted; but it can participate in all other operations including [wiki:Blessing blessing], relationships etc. * The string form of the HomeObject's MeshObjectIdentifier is the same as the string form of the MeshBase's MeshBaseIdentifier. == Modifying the content of the MeshBase == * Life cycle operations on [wiki:MeshObject MeshObjects] are performed by means of an associated object called the MeshBaseLifecycleManager. There is exactly one MeshBaseLifecycleManager per MeshBase. * Read-only access to the content of a MeshBase does not require a [wiki:Transaction]. Listening to [wiki:Event Events] emitted by the MeshBase or a contained MeshObject does not require a [wiki:Transaction] either. * Any modifying operation to one or more [wiki:MeshObject MeshObjects] (e.g. [wiki:Property] update, relating, unrelating, blessing, unblessing, deleting etc.) in the MeshBase throws an exception unless it is performed within proper [wiki:Transaction] boundaries. == !AccessManager == * A MeshBase may have an associated AccessManager. The same AccessManager may be shared by several [wiki:MeshBase MeshBases]. * The AccessManager encapsulates access control policies as they apply to the [wiki:MeshObject MeshObjects] in the MeshBase. == Sweeper == * A MeshBase may have an associated [wiki:Sweeper]. * The [wiki:Sweeper]'s job is to periodically scan the content of the MeshBase and remove obsolete [wiki:MeshObject MeshObjects]. For example, a [wiki:Sweeper] may remove all [wiki:MeshObject MeshObjects] whose expiration time has passed. The [wiki:Sweeper] is in charge of its own policy. See also: * [wiki:Docs/MeshObjectAnatomy Anatomy of a MeshObject] * [wiki:Docs/NetMeshBaseAnatomy Anatomy of a NetMeshBase] * MeshBase.