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

questionAnswers(2)

yourAnswerToTheQuestion