Throughout conversations with Domain Experts, you'll come across concepts in the Ubiquitous Language that can't be neatly represented as either an Entity or a Value Object, such as:
- Users being able to sign into systems by themselves
- A shopping cart being able to become an order by itself
The preceding example are two concrete concepts, neither of which can naturally be bound to either an Entity or a Value Object. Further highlighting this oddity, we can attempt to model the behavior as follows:
class User { public function signUp($aUsername, $aPassword) { // ... } } class Cart { public function createOrder() { // ... } }
In the case of the first implementation, we're not able to know that the given username and password relate to the invoked-upon user instance. Clearly, this operation doesn't suit this Entity; instead, it should be extracted out into a separate class, making its intention explicit.
With this in mind, we could create a Domain...