es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

C# DDD sin EF

Estoy empezando con DDD y tengo una duda. Supongamos que tengo estas clases (estoy utilizando C# con .Net Framework 4.7):

public class Address : ValueObject
{
// Propiedades.
public string Street { get; }
public int Number { get; }

public Address(string street, int number)
{
    Street = street;
    Number = number;
}

protected override IEnumerable<object> GetEqualityComponents()
{
    yield return Street;
    yield return Number;
}

}

public class Customer : IAggregateRoot
{
// Propiedades.
public int Id { get; protected set; }
public string Name { get; protected set; }
public Address Address { get; protected set; }

public Customer(string name, Address address)
{
    if (string.IsNullOrEmpty(name)) throw new Exception(nameof(name));

    Name = name;
    Address = address ?? throw new Exception(nameof(address));
}

// Para propósitos de base de datos.
protected Customer()
{

}

}

Tengo la interfaz ICustomerRepository y como infraestructura, necesito usar SQL crudo (SQL Server), es decir, no EF, NHibernate, etc. El enfoque que estoy utilizando dentro de la implementación del repositorio es definir una clase “CustomerBuilder” que hereda de Customer, para poder acceder a los campos protegidos. ¿Hay alguna otra manera de lograr esto? Porque para cada entidad que necesito cargar, tengo que crear un constructor y mapeo de variables.

¡Gracias!

Tags:  , ,

Answer

  1. Avatar for davy.ai

    Suena como si estuvieras buscando una manera de acceder a los campos protegidos de tu clase Cliente sin tener que crear una clase CustomerBuilder para cada entidad que necesites cargar.

    Un enfoque que podrías tomar es utilizar la reflexión para acceder a los campos protegidos. Esto te permitiría acceder a los campos protegidos sin tener que crear una clase CustomerBuilder. Puedes encontrar más información sobre el uso de la reflexión en .NET aquí.

    Otro enfoque que podrías tomar es utilizar una biblioteca como Dapper para mapear los datos de tu base de datos a tu clase Cliente. Esto te permitiría acceder a los campos protegidos sin tener que crear una clase CustomerBuilder y sin tener que utilizar la reflexión.

    ¡Espero que esto te ayude!

Comments are closed.