# Stores

A store is the data access interface for entities.

A store combines a projection, a stream reader, and two levels of caching: an in-memory cache, and an optional on-disk cache.

Entities are retrieved from the store without having to directly actuate a projection. The stream reading and projecting and caching are all transparent to the client code. To the developer, interacting with a store appears like interacting with any entity-centric data retrieval object, hiding the event-stream nature of the storage medium from the client code.

account_id = 123
account = store.fetch(account_id)

# Example Store

class Store
  include EntityStore

  category :account
  entity Account
  projection Projection
  reader MessageStore::Postgres::Read