Service Layer

2023. 4. 3. 07:28·📘 Backend/Spring

📘API <-> Service 연동 실습

API 계층에서 전달받은 DTO 객체를 서비스 계층의 도메인 엔티티 객체로 변환

  1. 계층별 관심사 분리
  2. 코드 구성의 단순화
  3. Rest API 스펙의 독립성 확보

리팩터링 포인트

1. 컨트롤러의 핸들러가 DTO를 엔티티로 변환하는 작업까지 하고있다

DTO를 엔티티로 변환하는 작업을 다른 클래스에게 변환 위임 = membermapper
컨트롤러는 이제 두 클래스의 변환작업을 안함 (역할 분리)

2. 엔티티 클래스의 객체를 클라이언트의 응답으로 전송함으로써 계층간 분리 X
클라이언트 응답을 엔티티 클래스로 전송하지말고, 엔티티의 객체를 DTO의 객체로 바꿔줌
membermapper가 엔티티를 dto로 변환해줌으로써 서비스에있는 엔티티를
apu에서 직접 사용하는 문제 해결


📘구현

Entity

img


ResponseDto

응답 데이터의 역할

img


Service

핵심 비즈니스로직 처리

img


Mapper

img


MemberMapperImpl

Mapstruct에 의해 DTO <-> Entity가 자동 매핑되어 생긴 클래스

@Generated(
    value = "org.mapstruct.ap.MappingProcessor",
    date = "2022-10-24T13:51:17+0900",
    comments = "version: 1.5.3.Final, compiler: IncrementalProcessingEnvironment from gradle-language-java-7.4.1.jar, environment: Java 11.0.16 (Azul Systems, Inc.)"
)
@Component
public class MemberMapperImpl implements MemberMapper {

    @Override
    public Member memberPostDtoToMember(MemberPostDto memberPostDto) {
        if ( memberPostDto == null ) {
            return null;
        }

        Member member = new Member();

        member.setEmail( memberPostDto.getEmail() );
        member.setName( memberPostDto.getName() );
        member.setPhone( memberPostDto.getPhone() );

        return member;
    }

    @Override
    public Member memberPatchDtoToMember(MemberPatchDto memberPatchDto) {
        if ( memberPatchDto == null ) {
            return null;
        }

        Member member = new Member();

        member.setMemberId( memberPatchDto.getMemberId() );
        member.setName( memberPatchDto.getName() );
        member.setPhone( memberPatchDto.getPhone() );

        return member;
    }

    @Override
    public MemberResponseDto memberToMemberResponseDto(Member member) {
        if ( member == null ) {
            return null;
        }

        long memberId = 0L;
        String email = null;
        String name = null;
        String phone = null;

        memberId = member.getMemberId();
        email = member.getEmail();
        name = member.getName();
        phone = member.getPhone();

        MemberResponseDto memberResponseDto = new MemberResponseDto( memberId, email, name, phone );

        return memberResponseDto;
    }
}
저작자표시 (새창열림)

'📘 Backend > Spring' 카테고리의 다른 글

Aggregate & JDBC  (0) 2023.04.03
Spring Exception Handler & Rest Controller Advice  (0) 2023.04.03
정규표현식 (Regex)  (0) 2023.04.02
Data Transfer Object (DTO)  (0) 2023.04.02
Spring MVC & Rest API & Servlet  (0) 2023.04.02
'📘 Backend/Spring' 카테고리의 다른 글
  • Aggregate & JDBC
  • Spring Exception Handler & Rest Controller Advice
  • 정규표현식 (Regex)
  • Data Transfer Object (DTO)
신건우
신건우
조용한 개발자
  • 신건우
    우주먼지
    신건우
  • 전체
    오늘
    어제
    • 분류 전체보기 (422)
      • 📘 Frontend (71)
        • Markup (1)
        • Style Sheet (2)
        • Dart (8)
        • Javascript (12)
        • TypeScript (1)
        • Vue (36)
        • React (2)
        • Flutter (9)
      • 📘 Backend (143)
        • Java (34)
        • Concurrency (19)
        • Reflection (1)
        • Kotlin (29)
        • Python (1)
        • Spring (42)
        • Spring Cloud (5)
        • Message Broker (5)
        • Streaming (2)
        • 기능 개발 (5)
      • 💻 Server (6)
        • Linux (6)
      • ❌ Error Handling (11)
      • 📦 Database (62)
        • SQL (31)
        • NoSQL (2)
        • JPQL (9)
        • QueryDSL (12)
        • Basic (4)
        • Firebase (4)
      • ⚙️ Ops (57)
        • CS (6)
        • AWS (9)
        • Docker (8)
        • Kubernetes (13)
        • MSA (1)
        • CI & CD (20)
      • 📚 Data Architect (48)
        • Data Structure (10)
        • Algorithm (8)
        • Programmers (17)
        • BaekJoon (5)
        • CodeUp (4)
        • Design Pattern (4)
        • AI (0)
      • ⚒️ Management & Tool (8)
        • Git (7)
        • IntelliJ (1)
      • 📄 Document (10)
        • Project 설계 (6)
        • Server Migration (3)
      • 📄 책읽기 (2)
        • 시작하세요! 도커 & 쿠버네티스 (2)
      • 🎮 Game (4)
        • Stardew Vally (1)
        • Path of Exile (3)
  • 블로그 메뉴

    • 링크

      • Github
    • 공지사항

    • 인기 글

    • 태그

      GStreamer #Pipeline
      React #Markdown
      Lock #Thread #Concurrency
    • 최근 댓글

    • 최근 글

    • hELLO· Designed By정상우.v4.10.0
    신건우
    Service Layer
    상단으로

    티스토리툴바