An adapter is a factory that produces an app model. In an effort to normalize data input and
output between Providers, subclasses must pass the data in Map<String, dynamic> format.
A model can be queried by the Repository, and if merited by the Repository implementation,
the Provider. Subclasses may extend Model to include Repository-specific needs,
such as an HTTP endpoint or a table name.
A Repository is the top-level means of relaying data between Models and Providers.
A conventional implementation would adhere to the singleton pattern.