Design da camada de acesso a dados no DDD
Desculpe-me pelo meu pobre inglê
Ok, estou pensando na abordagem DDD agora e parece ótimo, mas ... Há uma pequena pergunta sobre isso. O DDD diz que a camada do modelo de domínio está totalmente dissociada da camada de acesso a dados (e de todas as outras camadas). Portanto, quando o DAL salvar algum objeto de negócios, ele terá acesso apenas às propriedades públicas desse objeto. Agora a pergunta:
omo podemos garantir (em geral) que um conjunto de dados públicos de um objeto é tudo o que precisamos para restaurar o objeto posteriorment
Exempl
Temos as seguintes regras de negócios:
usuário e o domínio devem ser fornecidos para o objeto de negócios na criaçã Usuário e domínio não podem ser alterados após a criação do objetO objeto de negócios tem a propriedade Email, que se parece com "usuário @ domínio".qui está um POCO puro que descreve essas regra
public class BusinessObject
{
private string _user;
private string _domain;
public BusinessObject(string user, string domain)
{
_user = user;
_domain = domain;
}
public string Email
{
get { return _user + "@" + _domain; }
}
}
Então, em algum momento, o DAL salvará esse objeto no armazenamento externo (ou seja, banco de dados SQL). Obviamente, o DAL salvará a propriedade "Email" no campo associado no DB. Tudo funcionará bem até o momento em que solicitaremos ao DAL para restaurar o objeto. Como o DAL pode fazer isso? O objeto deve ter um setter público para o campo "Email" pelo menos. Algo com
public string Email
{
set
{
string[] s = value.Split("@");
_user = s[0];
_domain = s[1];
}
}
Na verdade, o objeto terá getters / setters públicos para os campos "Usuário" e "Domínio" e o método GetEmail (). Mas pare. Não quero que meu POCO tenha essa funcionalidade! Não há regras de negócios para isso. Isso deve ser feito para a capacidade de salvar / restaurar apenas o objet
Vejo outra opção. O ORM, que faz parte do DAL, pode ser solicitado a armazenar todos os campos particulares necessários para restaurar o objeto. Mas isso é impossível se queremos manter o modelo de domínio separado do DAL. O DAL não pode confiar em determinados membros particulares do objeto de negócio
A única solução alternativa que posso ver é ter algum instrumento no nível do sistema que possa criar o dump do objeto para nós e restaurar o objeto desse dump a qualquer momento. E o DAL deve colocar esse despejo no armazenamento, além das propriedades públicas do objeto. Portanto, quando o DAL precisar restaurar o objeto do armazenamento, ele usará o dump para isso. E as propriedades públicas salvas no armazenamento podem ser usadas quando o DAL está executando operações que não precisam ser instanciadas (ou seja, a maioria das consultas link2sql
Estou fazendo errado? Preciso ler mais? Sobre alguns padrões, o ORM talve