DDD, valor objetos e ORM
-
09-09-2019 - |
Pergunta
Valor não tem identidade. ORM precisa de identidade para atualizar o banco de dados.
Como enganar ORM?
(Marca de identificação para objeto valor como interno não funcionará porque vidas ORM em um conjunto diferente e movê-lo para o mesmo conjunto não é aceitável).
Agradecemos antecipadamente.
Solução
Quanto à minha compreensão do DDD vai objetos de valor são apenas uma maneira de dividir suas entidades. Se um objeto de valor deve ser armazenado com um ID no banco de dados não é um objeto de valor.
O modelo de domínio é assim (C #):
public class Customer : Entity
{
public Guid CustomerID { get; }
public string LastName { get; set; }
public Address HomeAddress { get; set; }
}
public class Address : ValueObject
{
public string Street { get; set; }
public string City { get; set; }
public string ZipCode { get; set; }
}
A tabela de banco de dados correspondente seria algo parecido com este (Pseudo-SQL):
CREATE TABLE Customers
(
CustomerID,
LastName,
HomeAddress_Street,
HomeAddress_City,
HomeAddress_ZipCode,
)
Para armazenar os endereços em uma tabela separada você iria torná-lo uma entidade que tem uma identificação.
Outras dicas
Quando Eric Evans fala sobre "entidades têm identidade, objetos de valor não", ele não está falando sobre uma coluna de identificação na base de dados -. Ele está falando sobre a identidade como um conceito
VOs não têm conceitual identidade. Isso não significa que eles não devem ter persistência identidade. Não deixe que a persistência nuvem implementação sua compreensão de Entidades contra Vos.
Veja o meu post aqui .
Pessoalmente, tenho o campo ID no objeto de valor - eu tratá-lo como um outro atributo do objeto de valor (como nome, localização etc).
Pode não ser verdade DDD mas funciona para mim.