Я был бы признателен за небольшую помощь здесь ...картограф Object против обертки объекта
Допустит, что в приложении мы имеем уровень данных и бизнес-логику. В DAL мы имеем следующую сущность:
public class Customer {
public string Name {get; set;}
public ICollection<Address> Addresses {get; set;}
}
public class Address {
public string Street {get; set;}
}
В УСКЕ мы следующий POCO которые:
public class CustomerDto {
public string Name {get; set;}
public ICollection<AddressDto> Addresses {get; set;}
}
public class AddressDto {
public string Street {get; set;}
}
Субъекты в DAL заселены с Светло-весом ОРМОМ и извлечь из УСКА используя репозиторий. Пример:
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;
}
}
Мои вопросы касательно/* НЕКОТОРЫЕ ПРЕОБРАЗОВАНИЯ ЗДЕСЬ */part. В нашей команде обсуждается, как делать «картографирование».
Один из подходов состоит в том, чтобы использовать устройство сопоставления либо автопарпер, либо ручное сопоставление. Второй подход заключается в том, чтобы использовать как обертку вокруг 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 и моей УСК, но я не уверен.
Есть ли какие-либо преимущества/недостатки использования одного подхода над другим?
Дополнительная информация: Обычно мы тянем максимум. из 1000 записей одновременно, которые необходимо преобразовать между Entity и DTO.
Если вы собираетесь использовать подход обертки, вы можете просто использовать сущности и забыть об использовании объектов dto. Вы не покупаете ничего с оберткой, но добавляете жесткую связь и другую зависимость. – dbugger
@dbugger - спасибо за ответ. Какую зависимость вы имеете в виду? BLL всегда знал интерфейсы от DAL, независимо от того, как мы используем mapper или wrapper для создания DTO. –