복붙노트

[SPRING] 봄 엔티티는 서비스중인 Dto로 변환해야합니까?

SPRING

봄 엔티티는 서비스중인 Dto로 변환해야합니까?

이 질문에 대한 의견을 듣고 나는 연구하기 시작했지만 여전히 혼란 스럽다.  엔티티는 컨트롤러로 돌아 오기 전에 Dto로 변환해야합니까? 나에게는 정말 실용적이지는 않다.

해결법

  1. ==============================

    1.우리는 소프트웨어 아키텍처에 대해 이야기하고 있으며 소프트웨어 아키텍처에 관해 이야기 할 때 항상 최선의 방법에 대해 무언가와 많은 의견을 제시하는 수천 가지 방법이 있습니다. 그러나 최선의 방법은 없습니다. 모든 것에 장단점이 있습니다. 이것을 명심하십시오!

    우리는 소프트웨어 아키텍처에 대해 이야기하고 있으며 소프트웨어 아키텍처에 관해 이야기 할 때 항상 최선의 방법에 대해 무언가와 많은 의견을 제시하는 수천 가지 방법이 있습니다. 그러나 최선의 방법은 없습니다. 모든 것에 장단점이 있습니다. 이것을 명심하십시오!

    일반적으로 서로 다른 레이어가 있습니다.

    일반적으로 각 레이어는 고유 한 종류의 객체를 사용합니다.

    즉, 각 레이어는 자체 개체로만 작동하고 절대로 다른 레이어로 전달하지 않습니다.

    왜? 각 레이어를 다른 레이어와 분리하기를 원하기 때문입니다. 컨트롤러에서 엔터티를 사용하는 경우 프레젠테이션은 데이터 저장 방법에 따라 달라집니다. 정말 안좋아. 보기는 데이터 저장 방법과 아무 관련이 없습니다. 데이터가 저장되는 방법이나 방법을 알지 못합니다.

    다음과 같이 생각하십시오. 데이터베이스 모델을 변경합니다 (예 : 데이터베이스 테이블 중 하나에 새 열을 추가합니다. 엔티티를 컨트롤러에 전달하면 컨트롤러가 JSON으로 표시합니다. 데이터베이스를 변경하면 프리젠 테이션이 변경됩니다. 엔티티가 JSON으로 직접 노출되는 경우 JavaScript 또는 JSON을 사용하는 다른 클라이언트가 변경 될 수도 있습니다. 따라서 데이터베이스를 간단히 변경하려면 JavaScript 프런트 엔드를 변경해야 할 수 있습니다. 이는 레이어를 매우 긴밀하게 연결하기 때문입니다. 실제 프로젝트에서는 그렇게하지 않으실 겁니다.

    방법? 실용적이지 않은지 의심 스럽습니다. (의사) 코드에서이를 수행하는 방법에 대한 간단한 예입니다.

    class Repository {
        public Person loadById(Long id) {
            PersonEntity entity = loadEntityById(id);
            Person person = new Person();
            person.setId(entity.getId());
            person.setName(entity.getFirstName + " " + entity.getLastName());
            return person;
        }
    }
    

    이 예에서 저장소는 내부적으로 엔티티를 사용합니다. 이 엔티티를 아는 다른 레이어는 없습니다. 이것들은이 특정 레이어의 구현 세부 사항입니다. 따라서 리포지토리가 "사람"을 반환하도록 요청되면 엔티티에서 작동하지만 도메인 개체를 반환합니다. 따라서 repo와 함께 작동하는 도메인 계층은 엔티티를 변경해야하는 경우를 제외하고는 저장됩니다. 이름의 경우에서 볼 수 있듯이 도메인과 데이터베이스는 다를 수 있습니다. 데이터베이스가 이름과성에 이름을 저장하는 동안 도메인은 단일 이름 만 알고 있습니다. 그것은 이름을 저장하는 방법의 끈기의 세부 사항입니다.

    컨트롤러와 DTO에도 동일하게 적용됩니다.

  2. from https://stackoverflow.com/questions/34084203/spring-entities-should-convert-to-dto-in-service by cc-by-sa and MIT license