A temporal collection is a simple way to implement a Temporal Property or a Temporal Object.
A temporal instance (either a Temporal Property or Temporal Object), when going through a series of amendments, the property itself or the properties the object references change over time. Each version of the temporal instance captures the state of the instance that will last for some period of time until the instance changes again with another amendment.
Temporal Property vs. Temporal Object
If your underlying implementation tracks the changes of an instance at the property level but not at the object level, the implementation is Temporal Property. On the other hand, if the changes are tracked with snapshots at the object level, the implementation is Temporal Object.
When a class has a few properties that has temporal behavior and you want access to those temporal values, use Temporal Property. Whereas, if most of the properties of the class are temporal, use Temporal Object.
The basic representation and interface for a temporal collection provides get and put operations that use a date as an index:
Data Transfer Object (DTO) is an object used to pass data with multiple items in one shot between client and server, to avoid client from issuing multiple calls to a remote server to get each item in separate calls.
Optionally, we can make use of a DTO Assembler class as some sort of a mapper in between DomainObject and DataTransferObject to map from one side to another in either direction. That is, to create a serializable DTO object given a Domain Object, or to update a Domain Object given a DTO object.