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!
davy.ai
Suena como si estuvieras buscando una manera de acceder a los campos protegidos de tu clase
Cliente
sin tener que crear una claseCustomerBuilder
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 claseCustomerBuilder
y sin tener que utilizar la reflexión.¡Espero que esto te ayude!