Я был бы признателен за небольшую помощь здесь ...
Допустим, в приложении у нас есть уровень данных и уровень бизнес-логики. В DAL у нас есть следующий объект:
public class Customer {
public string Name {get; set;}
public ICollection<Address> Addresses {get; set;}
}
public class Address {
public string Street {get; set;}
}
В BLL у нас есть следующие POCO:
public class CustomerDto {
public string Name {get; set;}
public ICollection<AddressDto> Addresses {get; set;}
}
public class AddressDto {
public string Street {get; set;}
}
Сущности в DAL заполняются легким ORM и извлекаются из BLL с использованием репозитория. Бывший:
public class CustomerInformationService {
private readonly ICustomerRepository _repository {get; set;}
public CustomerInformationService (ICustomerRepository repository)
{
_repository = repository;
}
public class CustomerDto Get(int id)
{
var customerEntity = _repository.Get(id);
var customerDto = /* SOME TRANSFORMATION HERE */
return customerDTO;
}
}
Мои вопросы касаются части /* НЕКОТОРЫЕ ПРЕОБРАЗОВАНИЯ ЗДЕСЬ */. В нашей команде идет дискуссия о том, как сделать «отображение».
Один из подходов заключается в использовании картографа, либо автоматического, либо ручного сопоставления. Второй подход заключается в использовании своего рода оболочки вокруг Entity и ссылке на DTO, чтобы сохранить операцию копирования между объектами. Что-то вроде этого:
public class CustomerDto
{
private IEntity _customerEntity;
public IEntity CustomerEntity { get {return _customerEntity;}}
public CustomerDto(IEntity customerEntity)
{
_customerEntity = customerEntity;
}
public string Name
{
get { return _customerEntity.Name; }
}
public ICollection<Address> Addresses
{
get { return _customerEntity.Addresses; }
}
}
Второй подход кажется мне немного странным, потому что _customerEntity.Addresses выглядит как утечка (ссылка _customerEntity) между моим DAL и моим BLL, но я не уверен.
Есть ли преимущества/недостатки использования одного подхода по сравнению с другим?
Дополнительная информация: Обычно мы тянем макс. 1000 записей за раз, которые необходимо преобразовать между Entity и DTO.