저는 프로젝트에서 컨트롤러로부터 객체를받는 서비스 레이어를 DTO로 바꾸고 리포지토리에 보냅니다. 내 프로젝트의 모든 엔티티 클래스에 대해 엔티티의 속성과 정확히 동일한 DTO가 필요하다고 생각합니다. 그것이 좋은 아키텍처DTO의 속성은 엔티티의 속성과 같습니다.
- 인가 :
public class PersonDto { public int Id { get; set; } public string Name { get; set; } public int Age { get; set; } }; public class Person { public int Id { get; set; } public string Name { get; set; } public int Age { get; set; } }; public class PersonController : Controller { public ActionResult Create(CreatePersonViewModel createPersonViewModel) { var personDto = //here I map createPersonViewModel to a PersonDto _personCreateService.Create(personDto); } } public class PersonCreateService { public void Create(PersonDto personDto) { _repository.Create(personDto); } } public class PersonRepository { public void Create(PersonDto personDto) { Person person = PersonMapper.Map(personDto); _db.Person.Add(person); } }
그래서, 나는 그것에 대해 몇 가지 질문이 : 내가 몇 가지 코드를 보여주지 ?
- dto를 서비스중인 엔티티 또는 저장소에만 매핑해야합니까?
- 내 개체가 내 개체와 동일하게 만드는 데 문제가 있습니까?
- 자습서가 많이 가르쳐지기 때문에 내 컨트롤러에서 dbContext를 직접 사용하지 않는 것이 바보입니까?
당신은 또한 자동으로 EDMX 파일에서 DTO들과 어셈블러를 생성하기 위해 [EntitiesToDTOs] (http://entitiestodtos.codeplex.com)를 사용할 수 있습니다. – kzfabi
AutoMapper에 대해 알고 있습니다.하지만 실제로 엔티티와 동일한 엔티티가 필요한지 스스로에게 묻습니다. 현재 나는 DTO를 사용하지만 조금 지루하다고 생각합니다. – MuriloKunze
예, 귀하의 요지를 이해합니다. ORM의 일시적인 객체 (프록시)가 있고보기로 보내면 괜찮 으면 좋겠지 만 상상하면 엔터티의 게으른 속성을 호출하므로 데이터베이스에 뷰가 표시되므로 상상해보십시오. 뷰가 컨트롤러에 의해 처리되어야하는 모든 것을 준비해야하기 때문에'ViewModel '을 가질 필요가있다. AutoMapper, EntitiesToDTO 등의 도구가있는 이유입니다. –