Diseño de la capa de acceso a datos en DDD

Disculpe por mi pobre inglés.

Ok, estoy pensando en el enfoque DDD ahora y suena genial, pero ... Hay una pequeña pregunta al respecto. DDD dice que la capa del modelo de dominio está totalmente desacoplada de la capa de acceso a datos (y todas las demás capas). Entonces, cuando el DAL guarde algún objeto comercial, tendrá acceso solo a las propiedades públicas de este objeto. Ahora la pregunta:

Cómo podemos garantizar (en general) que un conjunto de datos públicos de un objeto es todo lo que necesitamos para restaurar el objeto más adelante?

Ejempl

Tenemos las siguientes reglas comerciales:

El usuario y el dominio se deben proporcionar para el objeto comercial en crear. El usuario y el dominio no se pueden cambiar después de la creación del objeto.El objeto comercial tiene la propiedad Correo electrónico que se parece a "usuario @ dominio".

Aquí hay un POCO puro que describe esas reglas:

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; }
    }
}

Entonces, en algún momento, el DAL guardará este objeto en el almacenamiento externo (es decir, la base de datos SQL). Obviamente, el DAL guardará la propiedad "Correo electrónico" en el campo asociado en DB. Todo funcionará bien hasta el momento en que le pidamos al DAL que restaure el objeto. ¿Cómo puede hacer esto el DAL? El objeto debe tener una configuración pública para el campo "Correo electrónico" al menos. Algo com

public string Email
{
    set
    {
        string[] s = value.Split("@");
        _user = s[0];
        _domain = s[1];
    }
}

En realidad, el objeto tendrá captadores / establecedores públicos para los campos "Usuario" y "Dominio" y el método GetEmail (). Pero detente. ¡No quiero que mi POCO tenga tanta funcionalidad! No hay reglas comerciales para ello. Esto debe hacerse para poder guardar / restaurar solo el objeto.

Veo otra opción. Se le podría pedir al ORM que es parte del DAL que almacene todos los campos privados necesarios para restaurar el objeto. Pero esto es imposible si queremos mantener el modelo de dominio separado del DAL. El DAL no puede confiar en ciertos miembros privados del objeto comercial.

La única solución que puedo ver es tener algún instrumento a nivel del sistema que pueda crear el volcado del objeto para nosotros y pueda restaurar el objeto de este volcado en cualquier momento. Y el DAL debe colocar este volcado en el almacenamiento además de las propiedades públicas del objeto. Entonces, cuando el DAL necesita restaurar el objeto del almacenamiento, usará el volcado para esto. Y las propiedades públicas guardadas en el almacenamiento se pueden usar cuando el DAL está realizando operaciones que no necesitan que el objeto sea instanciado (es decir, la mayoría de las consultas link2sql).

¿Lo estoy haciendo mal? ¿Necesito leer más? Acerca de algunos patrones, ¿ORM quizás?

Respuestas a la pregunta(2)

Su respuesta a la pregunta