Value Objects
An object that represents a descriptive aspect of the domain with no conceptual identity is called a VALUE OBJECT.
(Eric Evans)
Two Entities with the same properties but with different Id
s are considered as different entities. However, Value Objects have no Id
s and they are considered as equals if they have the same property values.
The ValueObject Class
ValueObject
is an abstract class that can be inherited to create a Value Object class.
Example: An Address class
A Value Object class must implement the
GetAtomicValues()
method to return the primitive values.
ValueEquals
ValueObject.ValueEquals(...)
method is used to check if two Value Objects are equals.
Example: Check if two addresses are equals
Best Practices
Here are some best practices when using Value Objects:
Design a value object as immutable (like the Address above) if there is not a good reason for designing it as mutable.
The properties that make up a Value Object should form a conceptual whole. For example, CityId, Street and Number shouldn't be separate properties of a Person entity. This also makes the Person entity simpler.
Last updated