Surrogate Identity

Sometimes when using an ORM to map Entities to a persistence store, some constraints are imposed — for example, Doctrine demands an integer field if an IDENTITY generator strategy is used. This can conflict with the Domain Model if it requires another kind of Identity.

The simplest way to handle such a situation is by using a Layer Supertype, where the Identity field created for the persistence store is placed:

namespace DddCommonDomainModel;

abstract class IdentifiableDomainObject
{
private $id;

protected function id()
{
return $this->id;
}

protected function setId($anId)
{
$this->id = $anId;
}
}

namespace AcmeBillingDomain;

use AcmeCommonDomainIdentifiableDomainObject;

class Order extends IdentifiableDomainObject
{
private $orderId;

public function orderId()
{
if (null === $this->orderId) {
$this->orderId = new OrderId($this->id());
}

return $this->orderId;
}
}
..................Content has been hidden....................

You can't read the all page of ebook, please click here login for view all page.
Reset