It was named by Martin Fowler in his 2003 book Patterns of Enterprise Application Architecture.
[1] The interface of an object conforming to this pattern would include functions such as Create, Read, Update, and Delete, that operate on objects that represent domain entity types in a data store.
The goal of the pattern is to keep the in-memory representation and the persistent data store independent of each other and the data mapper itself.
This is useful when one needs to model and enforce strict business processes on the data in the domain layer that do not map neatly to the persistent data store.
Implementations of the concept can be found in various frameworks for many programming environments.