of objects, attributes, behaviors, interactions, events - Should present a useful Model of the real world - Expressive: exposes how things work in plain language - Helps reason about your problem domain - Handles increasing complexity Samples: github / Cart
+ Small single-task Methods • A class should have only one reason to change • Separate Queries (->get*) & Commands (->update*) • Use Factory classes ( CartFactory::Create() )
an identity and a lifecycle • Value Objects -- descriptive, immutable data objects • Aggregates -- Composite Objects w/Root Entity • Collections & Repositories