You should work with the catalog to use the [Catalog content](🔗) APIs. However, Optimizely Customized Commerce also has a number of low-level APIs for working with the catalog. Most of them are considered legacy, but can be useful in specific scenarios.
Classes in this topic for working with catalogs are in the Mediachase.Commerce.Catalog namespace.
Context classes are singletons that retrieve and save data from a database and put that data into collections or Data Transfer Objects (DTOs).
**[New in Commerce 14]** CatalogOptions options class for catalog configuration options. (Versions 10-13: Configuration classes are singletons that retrieve configuration information from config files).
Manager classes also retrieve and save data from the database. Sometimes the context class uses the manager classes to access the database.
Primary interface: CatalogContext.Current.
The Current property is the singleton instance of the object retrieves and updates information in the catalog.
The current property is an instance of a class which implements the ICatalogSystem interface. By default, Mediachase.Commerce.Catalog.Impl.CatalogContextImpl is used. This is located in _BusinessLayer > CommerceLib > Catalog > Impl > SiteContextImpl.cs_.
eCommerce Framework (ECF) also provides a starting version of a web service implementation class: Mediachase.Commerce.Catalog.Impl.CatalogContextProxyImpl > _SiteContextProxyImpl.cs_.
The ECF Catalog interface returns either DTOs or Objects. The DTOs represent typed datasets. Typed dataset resembles the database with one-to-one mapping to related tables and their fields. Objects are a bit leaner and easier to work with, and are recommended for data retrieval.
The DTO classes are located in _BusinessLayer/CommerceLib/Catalog/Dto_.
The objects are located in _BusinessLayer/CommerceLib/Catalog/Objects_.
The Entry and CatalogNode objects are the most fundamental objects you will access.
DTOs are best for saving catalog data.
**Example:** looking for changed data in the DTO and saving new, changed, or deleted data
You can also create objects from DTO objects. For example, there is a constructor for CatalogNode that lets you pass a CatalogNodeRow in:
To access the meta data fields, use the object's ItemAttributes property.
The Entry and CatalogNode objects contain virtually all of the associated information as properties.
Other classes useful in retrieving other catalog data reside in _BusinessLayer/CommerceLib/Catalog/Managers_.