Choose to model a contained Aggregate part as a Value Object rather than an Entity whenever possible. A contained part that can be completely replaced, if its replacement does not cause significant overhead in the model or infrastructure, is the best candidate.
Product model is designed with two simple attributes and three Value-typed properties. Both
String attributes that can be completely replaced. The
tenantId Values are maintained as stable identities; that is, they are never changed after construction. They support reference by identity rather than direct to object. In fact, the referenced
Tenant Aggregate is not even in the same Bounded Context and thus should ...