We extend entities by adding additional attributes to them. Referring back to the magical getter and setter methods mentioned in the context of Magento\Framework\DataObject, the logical thinking might be: what's the big deal; can't we just add new database columns via UpgradeSchema and use magical getter and setter methods to go around it? The answer is both yes and no, but mainly leaning toward no – we will soon learn why.
To better explain this, let's take a look at Magento\Sales\Model\Order, the entity model. This model implements the Magento\Sales\Api\Data\OrderInterface interface, which further extends Magento\Framework\Api\ExtensibleDataInterface. Here, we can see a constant defining a key for the extension attributes object. This is somewhat of a starting point for extending entities. Suffice to say, there is an extra abstraction...